D3.js SVG绘图实践:波浪动画

ECharts水球图实战:从基础配置到动态交互全解析 本文全面解析了ECharts水球图(Liquid Fill Chart)的实战应用。从安装配置、版本兼容性入手,详细讲解了基础绘制、多波浪与颜色定制、形状变换(圆形、SVG路径等)、样式控制以及动态数据更新与交互事件绑定。文章还提供了常见问题排查与性能优化技巧,帮助开发者快速掌握这一生动的数据可视化方案,适用于进度展示、实时监控等场景。 阅读详情

效果图

svg波浪效果

TALK IS CHEAP

源码就50多行,比较好看懂。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>svg动画</title>
    <script src="https://d3js.org/d3.v4.min.js"></script>
  </head>
  <body>
    <svg id="svg-area" width="500" height="200">
      <path fill="rgba(33, 150, 243, 0.4)"></path>
      <path fill="rgba(33, 150, 243, 0.6)"></path>
    </svg>
    <script>
      //波浪动画
      var svg_height = 200,
        svg_width = 500,
        wave_data = [[],[]],
        area = d3.area().y0(svg_height).curve(d3.curveBasis),   //curve会进行平滑处理
        svg_paths = [];
      var max = 100;  //控制速度
      for (var i=0; i<max; i++) {
        var r = i / max * 2;
        wave_data[0].push(r);           //波浪一
        wave_data[1].push(r + 1);   //波浪二(+1代表偏移π)
      }
      var d = svg_width/(wave_data[0].length-1);
      svg_paths.push(d3.select('#svg-area path:first-child'));
      svg_paths.push(d3.select('#svg-area path:last-child'));
      function area_generator(data) {
        var wave_height = 0.15;     //波浪高度
        var area_data = data.map( function(y,i) {
          return [i * d, svg_height*(1 - (wave_height*Math.sin(y*Math.PI) + 2)/3)]; //+2将范围[-1,1]转成[1,3]
        } );
        return function() {
          return area(area_data);
        };
      }
      function renderWave() {
        svg_paths.forEach(function(svg_path,i){
          svg_path.attr('d', area_generator(wave_data[i]));
          wave_data[i] = getNextData(wave_data[i]);
        });
        requestAnimationFrame(renderWave);
      }
      function getNextData(data) {
        var r = data.slice(1);
        r.push(data[0]);
        return r;
      }
      requestAnimationFrame(renderWave);
    </script>
  </body>
</html>

补充

这估计是我写得最简短的博客之一了,看到这里的同学估计是我的代码没写好,没有简单易懂,下面补充一下实现的思路和涉及到的一些知识点吧。

实现思路

因为之前画过趋势图(D3.js SVG绘图实践:趋势缩略图),所以看到波浪动画,第一想法就是,这不是两个带透明度重叠的区域嘛,让区域动起来就好。

画区域已经在上一篇博客中解决了,这次只不过加了平滑处理:

    area = d3.area().y0(svg_height).curve(d3.curveBasis)    //curve会进行平滑处理

重点是怎么动起来:

  • 方案一:用transform实现平移(一般思路,从左到右,然后移到与开始视觉一样时瞬间移回原点)
  • 方案二:区域不动,区域上边界按照波浪的规律动,重绘区域(实现比较复杂)
  • 方案三:将区域数据平移,重绘区域
function getNextData(data) {
    var r = data.slice(1);
    r.push(data[0]);
    return r;
}
一些知识点:

总结

实现上没很大的难度,但一开始因为用了Math.sin,波浪起伏的幅度较大,看着不像波浪在上下动,而是在从右往左移动,一开始都想尝试之前的方案二了,后来去看了波浪的效果,发现主要问题出在波浪本来就不是正弦图形那样的,于是改成了0.15 * Math.sin,效果就好多了。

最近在计划手上的React项目重构的事,也在看各类库的源码,希望能有更多的东西和大家分享,共勉。

动态验证码系统:文件流转码技术提升Web安全防护 验证码技术作为Web安全的基础防线,通过人机识别有效防止自动化攻击。其核心原理是利用图像处理技术生成难以被机器识别的文本或图形,结合动态干扰算法增加破解难度。随着OCR和机器学习的发展,传统静态验证码的防护效果逐渐降低。文件流转码技术通过多阶段格式转换(如SVG→PDF→PNG)和元数据注入,显著提升验证码系统的安全性。该技术在金融、政务等高安全需求场景中尤为重要,能够将破解率从32%降至0.7%。实现过程中需关注Canvas绘图、动态干扰算法和内存管理等关键技术,同时结合分布式部署和性能监控确保系统稳定性 阅读详情

相关推荐

SVG波浪翻滚背景动画:从贝塞尔曲线到CSS性能优化实战

在网页设计中,动态背景往往能显著提升视觉层次感,而SVG作为矢量图形格式,天然具备体积小、缩放清晰、DOM可操作等优势。其基本原理是通过贝塞尔曲线定义波浪路径,再配合CSS动画实现无缝平移,营造出水面涌动的视觉效果。相比Canvas,SVG无需绘制循环即可获得良好性能,适合作为登录页、活动页Hero区域的轻量背景方案。实际落地时,需关注路径周期与位移匹配、图层数量与合成层开销、响应式适配等关键细节,并通过transform而非修改路径数据来保证动画流畅度。本文从一条简单path讲起,逐步展开两层视差波浪的完

weixin_29504571的博客 264

D3.js在vue中实现水波球

参考:https://www.cnblogs.com/flashing-magic/p/11776365.html https://blog.csdn.net/slzs_zyt/article/details/81068783 https://blog.csdn.net/code_for_free/article/details/52268686

weixin_42077503的博客 1073

基于SVG的炫酷滚动菜单轨迹跟随特效实现

这一整套流程下来,你已经掌握了从SVG底层语法到高级交互动效的全链路能力。但记住,技术只是手段,最终目的是创造令人愉悦的用户体验。下次当你看到一个随滚动翩翩起舞的小光标时,别只感叹“哇好酷”,试着去拆解它的轨迹、分析它的节奏、感受它的呼吸。这才是前端工程师的乐趣所在,不是吗?😎✨本文还有配套的精品资源,点击获取简介:本项目利用SVG(可缩放矢量图形)技术实现了一个视觉效果出众的滚动菜单,支持随用户滚动操作沿预设路径动态跟随,显著提升网页交互体验。

weixin_30838971的博客 844

湍流svg流水动画js特效

下载地址dd:

ICode联盟 444

React Native动效开发:用ART绘制水波纹、波浪线与音频频谱的实战指南

在移动应用开发中,流畅的动画与数据可视化效果是提升用户体验的关键。无论是水波纹、波浪线还是音频频谱,其本质都是通过数学函数生成动态矢量路径。React Native社区提供的ART模块支持高效的路径绘制,开发者可利用正弦函数与相位变化驱动波浪动画,通过描边与填充实现不同视觉样式,并结合外部音频数据刷新柱状图。然而,性能优化与监听器生命周期管理是实践中的常见挑战,合理设置采样步长、节流更新频率以及规范清理动画资源,可有效保障低端设备的流畅度。本文梳理了基于ART实现三类动效的完整思路,帮助开发者掌握跨平台动画

weixin_32479897的博客 282

动态波浪效果threejs-waves

jquery实现动态波浪效果threejs-waves,随鼠标滑动而动

SVG网页波浪动画效果背景

给大家分享一个SVG网页波浪动画效果背景。

2301_76965813的博客 1104

CSS3 SVG波浪线条动画特效

CSS3 SVG波浪线条动画特效是一款简单的线条波浪滚动,线条弯曲动画特效。

svg波浪动画

之前做过CSS动画、canvas动画,但svg动画第一次做,最终效果如下图所示。 分析 由上图可以看出,波浪动画是由多个不同的‘波浪’组成,而每个波浪则是由近似正弦图形组成,最后的‘波动’效果,其实是静态的波浪循环向左运动产生的。 同时介绍后面会用到的几个svg相关标签: path:定义形状的基础元素,其中d属性就是图形的路径。静态的波...

weixin_34238642的博客 583

THREE 波浪形线条效果

THREEJS 98 开发的波浪形线条的效果 了,使用sin cos等形成波浪形状 也可以改成点来展示 可设置多条 高度 宽度 的波浪

如何在软件复位后保留指定RAM区域的数据

本文主要介绍S32K144的RAM retention功能

北极熊的脖子(16605192620@163.com) 1万+

基于svg mask实现的tab切换效果

效果第一次看到这个效果是在阿里妈妈MUX的博客:UI动效—细微交互,极致体验,里面搜集的一些微交互都让人眼前一亮,恰好自己最近要做一个按钮组,就参考了里面Sergey Valiukh的一个设计。源码和上两篇博客一样,相对简单,为了节省你的阅读时间,直接上源码: 上两篇博客: D3.js SVG绘图实践:趋势缩略图 D3.js SVG绘图实践:波浪动画 <!DOCTYPE html>

沉淀 1514

Openclaw Onboarding向导全攻略——如何配置你的第一个AI助手

很多新手在成功运行 `openclaw --version` 后,面对黑底白字的终端就陷入了迷茫:“安装好了,然后呢?” 本篇我们就彻底解决这个问题,带你完整走完 `openclaw onboard` 交互式初始化配置向导的每一步,从“安装完成”到“真正能用”,只差这一个向导的距离。 本文为2026年3月最新版,适配OpenClaw v2026.2.x 稳定版,所有步骤均经过实测验证,可直接落地。

夏日清风 1917

SVG波浪线实现指南:从路径语法到响应式动画的工程实践

矢量图形通过数学公式描述形状,具备缩放不失真、样式可编程、DOM可交互等特性,是响应式Web图形的基础方案。其核心原理在于路径语法与坐标系变换,通过贝塞尔曲线控制点精确调节曲率,结合viewBox实现自适应布局。在工程实践中,矢量方案能显著降低多倍屏适配成本,支持动态主题切换与流畅动画,广泛应用于仪表盘装饰、卡片分割线、数据可视化等场景。针对波浪线这一典型需求,深入解析路径命令、参数计算、CSS动画与性能优化策略,帮助开发者掌握从静态线条到多层渐变填充的完整实现路径。

weixin_30737899的博客 136

大模型——dify实战通过dify搭建你自己的图片识别服务

本文介绍了如何通过Dify平台搭建图片识别服务。首先创建工作流,添加支持图片上传的字段,并配置视觉模型qwen-vl-max-latest进行图像分析。文章详细说明了各步骤操作,包括字段设置、模型选择、提示词编写等。在测试阶段发现URL解析问题后,提供了解决方案:修改Dify的.env文件,调整FILES_URL配置并重启服务。最终成功实现上传图片或输入图片链接后,AI能够准确分析并返回简洁的图片内容描述。这一方案适用于需要快速部署图像识别功能的场景。

1924

为什么一个“时间片”能折腾 Linux 十年?

时间片扩展不是抢占调度器的控制权,也不是提升优先级。在“非常短暂、非常确定”的用户态临界区内,避免线程被不必要地抢占。用户态自旋锁(user-space spinlock)无系统调用的极短临界区高并发、低延迟的数据结构操作RSEQ(Restartable Sequences)保护区间一旦线程在临界区被抢占,系统整体性能反而下降。线程 A 拿着一个用户态锁线程 B 被调度上来,开始自旋等这个锁但 A 因为时间片用完,被调度器切走CPU 白白空转,所有线程都在浪费时间。

网络技术联盟站 253

深度掌握SVG路径path的贝塞尔曲线指令

by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wordpress/?p=4197 一、数字、公式、函数、变量,哦,NO! 又又一次说起贝塞尔曲线(英语:Bézier curve,维基百科详尽中文释义戳这里),我最近在尝试实现复杂的矢量图形动画,发现对贝塞尔曲线的理解馒头那么厚,是

SalmonellaVaccine的专栏 1826

PyTorch深度学习实战(3)——使用PyTorch构建神经网络

PyTorch 是一个用于构建深度神经网络的库,具有灵活性和可扩展性,可以轻松自定义模型。在本节中,我们将使用 PyTorch 库构建神经网络,利用张量对象操作和梯度值计算更新网络权重,并利用 Sequential 类简化网络构建过程,最后还介绍了如何使用 save、load 方法保存和加载模型,以节省模型训练时间。

盼小辉丶的博客 8万+

SVG path路径抖动与状态机原理深度解析

SVG路径(path)是矢量图形的核心表达机制,其本质是一套基于当前点(current point)的状态驱动指令系统,而非静态坐标集合。理解M/L/C/Q/Z等命令的数学原理、绝对/相对模式差异及隐式状态继承关系,是解决路径错位、闭合异常、贝塞尔曲线不平滑等渲染问题的关键。该机制赋予SVG高精度缩放、高效动画与紧凑数据表达能力,广泛应用于图标系统、数据可视化、UI动效及嵌入式设备界面。本文聚焦path标签底层状态机模型,结合渐开线齿轮等工程案例,揭示参数精度、浮点容差与命令链依赖对路径稳定性的决定性影响。

weixin_34228387的博客 336

恒玄BES调试笔记-BES2500如何Dump Anc Audio数据

从YP的4M flash改HP3的2M flash只需要改: 原工程:target.mk的export FLASH_SIZE ?= 0x200000和common.mk里的KBUILD_CPPFLAGS += -DNEW_IMAGE_FLASH_OFFSET=0x100000 OTA工程:target.mk的NEW_IMAGE_FLASH_OFFSET ?= 0x100000和FLASH_SIZE ?= 0x200000 ...

leezs的博客 1672

【RT-DETR实战】RT-DETR实战手记(200):端侧实时目标检测,下一步往哪儿走?

昨天深夜调一个模型部署,在树莓派4B上跑RT-DETR-nano,帧率死活卡在8FPS上不去。量化也做了,算子也优化了,内存对齐也检查了,可就是离实时检测的底线还差一截。盯着终端里跳动的数字,突然意识到——我们可能正在接近当前技术路径的瓶颈。端侧实时目标检测的下一个突破口,恐怕不在现有框架的修修补补里。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 186

QML圆形波浪进度条高性能实现方案

圆形波浪进度条是一种融合几何建模、流体物理模拟与GPU加速渲染的高阶UI动效组件,其核心原理在于将百分比进度映射为非线性波浪形态,并通过极坐标到弧长参数化的数学优化规避精度失真。技术价值体现在跨平台60fps稳定渲染、毫秒级响应及嵌入式设备(如树莓派)下的低开销运行能力。典型应用场景包括工业HMI监控面板、医疗设备状态反馈、车载仪表盘等对视觉可信度要求严苛的系统。本文围绕QML生态展开,深度结合C++后端数据驱动与Fragment Shader物理计算,解决传统正弦波方案卡顿、闪烁、失真等共性难题。

weixin_34280237的博客 425

高通开发系列 - Bootloader之lk匹配dtb和dtbo中msm-id和board-id的知识

lk匹配dtb和dtbo中的msm-id和board-id等知识

fulinux的博客 4245

免费在线SVG路径编辑器终极指南:零基础快速上手矢量图形编辑

SVG路径编辑器(SVG Path Editor)是一款强大的在线矢量图形编辑工具,专门用于创建和修改SVG路径数据。无论你是前端开发者、UI设计师还是图形爱好者,这款免费工具都能让你轻松掌握SVG路径编辑的核心技能,从简单图标到复杂曲线都能高效完成。 ## 🚀 快速入门:5分钟开启SVG编辑之旅 ### 准备工作与环境搭建 首先,你需要获取项目代码并设置本地开发环境: ```bash

gitblog_00103的博客 342

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数据可视化学习总结

由于工作也要负责可视化这块,因此会做很多可视化的例子,这里将所有可视化的例子总结出来: (1)Mapbox-bar3D(3D地图柱状图) (2)Maptalks-bar3D(3D地图柱状图) (3)geo3D-bar3D(3D地图柱状图) (4)人口迁移轨迹(样式更好看lines3D) (5)人口迁移流动图(百度地图) (6)geo3D-北京公交线路图(2.5D地图流动) (7)mapbox-北京...

Ocean111best的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ECharts 水球图不够炫?试试 RayChart 的创意可视化玩法

如果你需要一个快速加载、兼容性强的进度展示,ECharts依然是首选。如果你在做酷炫的数据大屏,想要那种“看起来很贵”的效果,RayChart的 3D 水球绝对值得一试。RayChart项目正在探索更多这样的 3D 图表组件,希望能把 WebGL 的门槛降下来,让大家都能轻松用上“电影级”的图表。

2501_92872533的博客 799
上一篇: D3.js SVG绘图实践:趋势缩略图
下一篇: 基于svg mask实现的tab切换效果
Sheldon_Law
博客等级 码龄11年 44粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值