当前位置:首页 > 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)

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

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实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js 实现倒计时

js 实现倒计时

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

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…