文字拆分动画
SplitText
SplitText 逐字动画 逐行动画 文字拆分 Text Split Kinetic Typography
GSAP 动画用 GSAP 的 SplitText 把文本拆成行、单词或字符,再对每一片单独做动画,实现逐字浮现、按行遮罩滑入等排版动效。
又称:逐字动画 · 逐行动画 · 文字拆分 · Text Split · Kinetic Typography
- GSAP
- CSS
- Claude / Cursor
Motion is the
language of interface.
Prompt 片段
用 GSAP SplitText 做标题入场:SplitText.create 拆成 lines 和 chars,mask: 'lines',字符从 yPercent: 110、rotate: 6 进入,duration 0.8,ease expo.out,stagger 0.02。段落按行淡入:SplitText 只拆 lines,开启 autoSplit,在 onSplit 回调里创建并 return 动画,保证字体加载或窗口缩放后重新拆分时动画不错位。组件卸载时调用 split.revert() 还原原始 DOM,并确认拆分后读屏软件仍能读出完整文本。
是什么
文字拆分动画是先把一段文字拆成独立的行、单词或字符元素,再分别给它们加动画。GSAP 的 SplitText 插件负责拆分这一步,自 3.13 起随 gsap npm 包免费提供,从 gsap/SplitText 导入并注册。3.13 版本对它进行了重写,新增 SplitText.create() 写法、mask 遮罩和 autoSplit 自动重拆,并默认处理无障碍:给原元素加 aria-label,拆出的片段设为对读屏软件隐藏。
上方演示用 type: 'lines,chars' 同时拆出行和字符,mask: 'lines' 给每一行包上一层裁切容器。字符从行的下方向上滑入,超出行框的部分被遮住,看起来像文字从一条缝里升起来;停留片刻后再向上滑出。
核心参数
| 参数 | 含义 |
|---|---|
type |
拆分粒度:'chars'、'words'、'lines',可逗号组合 |
mask |
'lines'、'words' 或 'chars',为对应片段加裁切容器 |
autoSplit |
字体加载完成或容器宽度变化时自动重新拆分 |
onSplit |
每次拆分后的回调,返回的动画会在重拆时被接管 |
linesClass / charsClass |
给拆出的元素加类名 |
revert() |
还原为拆分前的 DOM |
代码示例
import { gsap } from 'gsap';
import { SplitText } from 'gsap/SplitText';
gsap.registerPlugin(SplitText);
const split = SplitText.create('.headline', { type: 'lines,chars', mask: 'lines' });
const tl = gsap.timeline({ repeat: -1, repeatDelay: 0.6 });
tl.from(split.chars, { yPercent: 110, rotate: 6, duration: 0.8, ease: 'expo.out', stagger: 0.02 })
.to(split.chars, { yPercent: -110, duration: 0.5, ease: 'power2.in', stagger: 0.012 }, '+=1.4');
// 不再需要时还原 DOM:split.revert();
什么时候用
- 首屏大标题、品牌口号等需要强调的短文本。
- 按行遮罩滑入的段落,营造杂志式的阅读节奏。
- 数字、关键词的逐字强调。
常见误区
- 在字体加载前拆分:换行位置会与最终渲染不一致。使用
autoSplit或等document.fonts.ready后再拆。 - 对长段落拆字符:会生成成百上千个元素,拖慢页面,长文本按行拆即可。
- 拆分后不还原:在单页应用中切换页面前记得
revert(),避免残留大量包裹元素。