svg路径动画实现文本手写效果,核心是将文字转为path路径后,用stroke-dasharray与stroke-dashoffset控制描边逐步显现;需通过设计工具、opentype.js或在线工具转换文字为路径,设置描边属性并配合css/js动画,优化节奏、分段延迟、轻微抖动及光标效果,注意兼容性与性能。

SVG路径动画实现文本手写效果,核心是把文字转为路径,再用stroke-dasharray和stroke-dashoffset控制描边“逐步显现”,模拟笔尖移动轨迹。
将文字转为SVG路径
浏览器原生不支持直接对<text></text>元素做描边动画,必须先将文字转成<:path>。可用以下方式:
- 设计工具导出:在Figma、Illustrator中将文字“轮廓化”(Outline),再导出为SVG,提取
d属性 - 代码生成:使用库如
opentype.js加载字体,调用font.getPath(text, x, y, fontSize)获取路径数据 - 在线转换:如svg-path-encoder粘贴文字快速生成路径
注意保持路径简洁,避免过多锚点影响动画流畅性;中文字体需确保子集或全量加载,否则可能缺字或乱码。
设置虚线描边与初始偏移
关键CSS/属性组合:
-
stroke: #000; fill: none;—— 只描边不填充 -
stroke-width: 2;—— 笔迹粗细 -
stroke-dasharray: X;—— 设为路径总长度(可用getTotalLength()获取) -
stroke-dashoffset: X;—— 初始设为X,动画中从X减到0,实现“从头写出”
例如:
配合@keyframes或animate标签让stroke-dashoffset从120变为0即可。
优化书写节奏与真实感
纯线性动画像机械绘图,加入变化更接近手写:
- 使用
ease-out或自定义贝塞尔曲线(如cubic-bezier(0.34, 1.56, 0.64, 1)),让起笔慢、收笔快 - 分段动画:多字文本可为每个
<:path>设置不同delay,模拟逐字书写 - 轻微抖动:用
transform: translate()叠加小幅度随机位移(需JS驱动),适合高保真场景 - 添加光标效果:在路径终点同步显示一个跳动的
<circle></circle>或竖线
兼容性与性能提醒
现代浏览器均支持stroke-dasharray动画,但要注意:
- Safari对
<animate></animate>标签支持较弱,推荐用CSS动画或GSAP等JS库驱动 - 长文本路径过长时,
getTotalLength()可能触发重排,建议缓存结果 - 移动端需加
will-change: transform;或启用transform: translateZ(0)提升渲染帧率 - 避免在
viewBox缩放过大时使用细笔迹(如stroke-width: 0.5),可能导致模糊或消失











