当前位置:首页 > 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实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…

js实现文件夹

js实现文件夹

使用JavaScript创建文件夹 在浏览器端的JavaScript中无法直接操作文件系统创建文件夹,这是出于安全考虑。但在Node.js环境中可以通过文件系统模块(fs)实现。 Node.js中使…

js 实现文件上传

js 实现文件上传

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。以下是一个基础示例: <input ty…

js实现点击隐藏

js实现点击隐藏

使用CSS类切换实现点击隐藏 通过添加或移除CSS类来控制元素的显示与隐藏。定义一个隐藏样式类如.hidden { display: none; },通过事件监听切换该类。 document.que…