当前位置:首页 > JavaScript

js实现大海

2026-02-01 18:29:08JavaScript

实现海洋动画效果

使用Canvas绘制动态波浪效果是模拟大海的常见方法。以下代码创建了一个带有波浪动画的海洋场景:

const canvas = document.getElementById('oceanCanvas');
const ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = 200;

let time = 0;
function animateWave() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.fillStyle = '#1a73e8';
    ctx.beginPath();

    const waveHeight = 20;
    const waveLength = 0.01;
    for(let x = 0; x < canvas.width; x++) {
        const y = canvas.height/2 + Math.sin(x * waveLength + time) * waveHeight;
        ctx.lineTo(x, y);
    }

    ctx.lineTo(canvas.width, canvas.height);
    ctx.lineTo(0, canvas.height);
    ctx.closePath();
    ctx.fill();

    time += 0.05;
    requestAnimationFrame(animateWave);
}
animateWave();

添加3D海洋效果

使用Three.js可以创建更逼真的3D海洋场景。需要先引入Three.js库:

import * as THREE from 'three';

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

const waterGeometry = new THREE.PlaneGeometry(100, 100, 128, 128);
const water = new THREE.Water(waterGeometry, {
    textureWidth: 512,
    textureHeight: 512,
    waterNormals: new THREE.TextureLoader().load('waternormals.jpg'),
    sunDirection: new THREE.Vector3(),
    sunColor: 0xffffff,
    waterColor: 0x0077be,
    distortionScale: 3.7
});
scene.add(water);

function animate() {
    requestAnimationFrame(animate);
    water.material.uniforms.time.value += 0.01;
    renderer.render(scene, camera);
}
animate();

使用CSS实现简单海浪

纯CSS也可以创建基础的波浪效果,适合性能要求不高的场景:

.ocean {
    position: relative;
    height: 100px;
    background: linear-gradient(to bottom, #0077be, #00a1ff);
    overflow: hidden;
}

.wave {
    position: absolute;
    bottom: 0;
    width: 200%;
    height: 100px;
    background-repeat: repeat no-repeat;
    background-position: 0 bottom;
    background-size: 50% 100px;
    animation: wave 7s linear infinite;
}

@keyframes wave {
    0% { transform: translateX(0); }
    100% { transform: translateX(-50%); }
}

添加海洋生物元素

增强真实感可以添加游动的鱼类或其他海洋生物:

function createFish() {
    const fish = document.createElement('div');
    fish.className = 'fish';
    fish.style.left = `${Math.random() * 100}%`;
    fish.style.top = `${60 + Math.random() * 30}%`;
    fish.style.animationDuration = `${5 + Math.random() * 10}s`;
    document.querySelector('.ocean').appendChild(fish);
}

for(let i=0; i<10; i++) {
    createFish();
}

优化性能的技巧

大规模海洋动画可能消耗较多资源,可以采用以下优化方法:

js实现大海

  • 限制动画帧率到30fps
  • 使用离屏Canvas预渲染静态元素
  • 对3D场景使用适当的LOD(细节层次)控制
  • 在移动设备上降低波浪的顶点数量

这些方法可以根据具体需求组合使用,从简单CSS动画到复杂3D渲染都能实现不同细节程度的海洋效果。

标签: 大海js
分享给朋友:

相关文章

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…

js实现左右滑动

js实现左右滑动

实现左右滑动的 JavaScript 方法 监听触摸事件 通过 touchstart、touchmove 和 touchend 事件来检测用户的手势操作。记录触摸的起始位置和移动距离,判断滑动方向。…

js验证码实现

js验证码实现

验证码的基本原理 验证码(CAPTCHA)用于区分人类用户和自动化程序。常见类型包括图形验证码、滑动验证码、短信验证码等。JavaScript 可用于前端验证码的生成和验证逻辑。 图形验证码实现 使…

js 多选 实现

js 多选 实现

实现多选的 JavaScript 方法 使用复选框(Checkbox)实现多选 通过 HTML 的 checkbox 元素配合 JavaScript 实现多选功能。用户可以选择多个选项,提交时获取所有…