关键在于stroke-dasharray与stroke-dashoffset控制绘制节奏,配合lineargradient位移实现色彩流动;需先定义路径与渐变,再用js获取路径长度设置虚线参数,最后通过css或smil动画使渐变坐标持续偏移。

用 HTML5 SVG 实现具有流动感的渐变线条动画,关键在于两层配合:一是用 stroke-dasharray 与 stroke-dashoffset 控制“画线”节奏,制造动态绘制效果;二是用 <lineargradient></lineargradient> 定义带方向与偏移的渐变色,并通过 transform 或 animateTransform 让渐变色持续位移,从而产生色彩随线条流动的视觉感。
1. 准备带渐变描边的 SVG 路径
先定义一条路径(<path></path> 或 <polyline></polyline>),确保它使用描边而非填充:
-
fill="none"避免遮盖描边效果 -
stroke="url(#grad)"引用渐变定义 -
stroke-width设为合适值(如 2–4),太细不易体现流动感
在 <defs></defs> 中声明线性渐变,注意设置 x1/y1/x2/y2 控制流动方向(例如从左到右:x1="0%" y1="0%" x2="100%" y2="0%"):
2. 设置虚线长度并初始化偏移
流动感的基础是“绘制动画”,必须获取路径真实长度:
- 用 JavaScript 调用
pathEl.getTotalLength()获取精确值(不能靠估算或getBBox()) - 将该值同时设为
stroke-dasharray和初始stroke-dashoffset,例如:stroke-dasharray="327" stroke-dashoffset="327" - 推荐写入 CSS 自定义属性便于复用:
style="--path-len: 327;"
3. 让渐变色“动起来”
仅让线条显现还不够,要实现色彩流动,需让渐变坐标持续变化。两种主流方式:
-
CSS 方式:对
<lineargradient></lineargradient>的gradientTransform属性做动画(需包裹在<g></g>或用 JS 动态更新);更常用的是给整个<path></path>添加transform: translateX()动画,再配合mask或双层路径模拟“光扫过”的效果 -
SVG SMIL 方式(兼容性稍弱但语义清晰):
推荐组合方案:CSS 控制线条绘制(stroke-dashoffset 动画),同时用另一个独立的 @keyframes 控制渐变容器的 transform: translateX(),速度略快于绘制动画,能强化“光在移动”的错觉。
4. 补充细节提升真实感
纯线性流动容易显得机械,可加入以下优化:
- 多段路径分时启动:给多个
<path></path>设置不同animation-delay,形成波浪式推进 - 描边宽度微调:配合
stroke-width的 CSS 过渡,让线条在起点略粗、终点略细,模拟手绘收笔 - 加轻微模糊或阴影:用
filter: url(#glow)增强光效,但注意性能开销 - IE 兼容降级:若需支持旧浏览器,可用
animate替代 CSS 动画,并禁用渐变位移,只保留基础绘制
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











