当前位置:首页 > JavaScript

js实现波浪线

2026-02-03 02:16:02JavaScript

使用 SVG 路径绘制波浪线

通过 SVG 的 <path> 元素定义波浪线路径,利用 d 属性设置贝塞尔曲线。以下代码创建一段水平波浪线:

<svg width="200" height="100" viewBox="0 0 200 100">
  <path d="M0 50 C20 10, 40 90, 60 50 S100 10, 120 50 S160 90, 180 50" 
        stroke="#000" fill="none" stroke-width="2"/>
</svg>
  • M0 50 从坐标 (0,50) 开始。
  • C20 10, 40 90, 60 50 定义第一段三次贝塞尔曲线,控制点 (20,10) 和 (40,90),终点 (60,50)。
  • S100 10, 120 50 使用 S 命令简化后续曲线,对称延续波浪形状。

使用 Canvas 动态绘制波浪线

通过 Canvas 的 quadraticCurveTobezierCurveTo 方法动态生成波浪动画:

const canvas = document.getElementById('waveCanvas');
const ctx = canvas.getContext('2d');
let offset = 0;

function drawWave() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.beginPath();
  ctx.moveTo(0, canvas.height / 2);

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

  ctx.strokeStyle = '#3498db';
  ctx.lineWidth = 2;
  ctx.stroke();
  offset += 0.1;
  requestAnimationFrame(drawWave);
}

drawWave();
  • 使用 Math.sin 函数生成周期性波浪效果。
  • offset 变量控制波浪动态移动。

CSS 动画模拟波浪线

结合伪元素和 CSS 动画实现简单波浪效果:

<style>
  .wave {
    position: relative;
    height: 2px;
    background: linear-gradient(90deg, transparent, #e74c3c, transparent);
    overflow: hidden;
  }
  .wave::after {
    content: "";
    position: absolute;
    top: -5px;
    left: 0;
    width: 100%;
    height: 10px;
    background: url('data:image/svg+xml;utf8,<svg viewBox="0 0 20 10" xmlns="http://www.w3.org/2000/svg"><path d="M0 5 C5 0, 10 10, 15 5 S25 0, 30 5" stroke="%23e74c3c" fill="none"/></svg>') repeat-x;
    animation: waveMove 1s linear infinite;
  }
  @keyframes waveMove {
    from { transform: translateX(0); }
    to { transform: translateX(-20px); }
  }
</style>
<div class="wave"></div>
  • 通过 SVG 内联背景和 transform 动画实现循环滚动效果。
  • 调整 viewBoxpath 数据可改变波浪形状。

使用第三方库(如 Anime.js)

若需复杂动画,可使用库简化实现:

js实现波浪线

import anime from 'animejs';

const path = anime.path('#wavePath');
anime({
  targets: '.dot',
  translateX: path('x'),
  translateY: path('y'),
  duration: 3000,
  loop: true,
  easing: 'linear'
});
  • 需预先定义 SVG 路径(#wavePath)作为运动轨迹。
  • 适用于元素沿波浪路径运动的场景。

选择建议

  • 静态展示:优先使用 SVG,代码简洁且矢量无损。
  • 动态效果:Canvas 适合高性能动画,CSS 适合轻量级装饰。
  • 复杂交互:考虑结合 GSAP 或 Anime.js 等动画库。

标签: 波浪js
分享给朋友:

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…