下面是一个使用 JavaScript 和 HTML5 Canvas 实现的动态波浪效果的完整示例。这个效果使用正弦波函数来模拟水面的波动,支持颜色渐变和动态变化。


✅ 效果说明:

  • 使用 canvas 绘制波浪。
  • 多层波浪叠加,形成更自然的动态效果。
  • 波浪随时间不断移动(动画)。
  • 可调节波浪的高度、频率、速度等。

📄 HTML 文件(index.html)

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>动态波浪效果</title><style>body {margin: 0;overflow: hidden;background-color: #000;}canvas {display: block;}</style>
</head>
<body><canvas id="waveCanvas"></canvas><script>const canvas = document.getElementById('waveCanvas');const ctx = canvas.getContext('2d');// 设置 canvas 全屏canvas.width = window.innerWidth;canvas.height = window.innerHeight;// 波浪配置const waveCount = 3; // 波浪层数const waveSpeed = 0.02; // 波浪移动速度const waveHeight = 80; // 波浪高度const baseY = canvas.height * 0.5; // 基准线(水面中心)// 颜色渐变const colors = ['#0077be', '#00aaff', '#005588'];// 动画参数let time = 0;function drawWave() {ctx.clearRect(0, 0, canvas.width, canvas.height);// 创建渐变背景(可选)const gradient = ctx.createLinearGradient(0, 0, 0, canvas.height);gradient.addColorStop(0, '#001122');gradient.addColorStop(1, '#003366');ctx.fillStyle = gradient;ctx.fillRect(0, 0, canvas.width, canvas.height);// 绘制多层波浪for (let i = 0; i < waveCount; i++) {const amplitude = waveHeight * (1 - i * 0.2); // 每层高度递减const frequency = 0.01 + i * 0.005;const speed = waveSpeed * (i + 1);const offsetY = baseY + 20 * Math.sin(time * 0.5 + i); // 微小上下浮动ctx.beginPath();ctx.moveTo(0, canvas.height);for (let x = 0; x <= canvas.width; x += 5) {const y =offsetY +amplitude *Math.sin((x * frequency) / 2 + time * speed) *Math.sin((x * frequency) + time * speed * 0.7); // 复合波形ctx.lineTo(x, y);}ctx.lineTo(canvas.width, canvas.height);ctx.lineTo(0, canvas.height);ctx.closePath();// 设置填充颜色ctx.fillStyle = colors[i % colors.length];ctx.globalAlpha = 0.6 - i * 0.1; // 透明度递减ctx.fill();}ctx.globalAlpha = 1; // 重置透明度time += 0.05;requestAnimationFrame(drawWave);}// 窗口大小改变时重置 canvaswindow.addEventListener('resize', () => {canvas.width = window.innerWidth;canvas.height = window.innerHeight;baseY = canvas.height * 0.5; // 重新计算基准线});// 开始动画drawWave();</script>
</body>
</html>

🔍 效果特点:

  • 多层波浪:叠加 3 层不同频率和振幅的波,使效果更真实。
  • 动态移动:通过 time 变量实现波浪流动。
  • 视觉层次:使用透明度和颜色渐变增强立体感。
  • 响应式:窗口缩放时自动调整画布大小。

🎨 可自定义参数:

参数 说明
waveCount 波浪层数
waveSpeed 波浪移动速度
waveHeight 最大波高
baseY 波浪中心线位置
colors[] 每层波浪颜色
amplitude, frequency 控制波形形状

✅ 运行方式:

  1. 将代码保存为 index.html
  2. 用浏览器打开即可看到动态波浪效果

如果你想加入鼠标交互(如波浪朝鼠标方向涌动),也可以扩展实现,需要监听 mousemove 事件并调整波浪中心。