使用 useTrail 和 useChain 实现序列动画
使用 useTrail 让多个元素的动画交错进行,并使用 useChain 编排动画序列
使用 useTrail 和 useChain 实现序列动画 是 CoddyKit 上的免费 React Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。
使用 useTrail 创建交错动画
useTrail(count, config) 会创建 count 个按顺序播放动画的弹簧,并允许配置每个弹簧之间的延迟。序列开始时,第一个项目会立即播放动画,第二个稍后开始,第三个再晚一些,依此类推,从而形成扇出或级联效果。
useTrail 的返回值
useTrail 会返回一个弹簧对象数组,序列中的每个项目对应一个对象。每个弹簧的结构都相同(键也相同),但会在不同的时间偏移后开始动画。您可以同时遍历序列数组和项目数组,为每个动画项目渲染与之对应的弹簧。
将序列动画应用到列表
通过遍历序列数组来渲染带有交错动画的列表:trail.map((spring, i) => React.createElement(animated.div, { style: spring, key: items[i].id }, items[i].content))。每个 animated.div 都会接收自己的弹簧对象,因此项目会按顺序播放动画。弹簧按照索引顺序运行:0、1、2、3……
控制序列动画方向
useTrail 支持通过切换来控制正向和反向动画。传入布尔状态 open 来控制方向:当打开状态为 true 时,序列会从隐藏状态播放到可见状态;为 false 时,则从可见状态反向播放到隐藏状态。序列会自动反转顺序,项目会按相反的顺序退出动画(后进入的先退出)。
序列配置与时序
useTrail 的配置对象与 useSpring 相同:张力、摩擦力和质量。项目之间的延迟取决于每个弹簧开始运行所需的时间,而这由整体弹簧物理参数控制。张力更高的刚性弹簧会产生更快的交错效果;更柔和的弹簧会形成更长的级联效果。
用于 useChain 的 useSpringRef
useSpringRef() 会创建一个引用,您可以通过弹簧钩子的 ref 选项将其附加到弹簧上。该引用可以让 useChain 控制弹簧何时开始。对于希望按顺序播放的每个弹簧或序列,您都需要创建一个引用:const springRef = useSpringRef(),然后传入:useSpring({ ref: springRef, ... })。
使用 useChain 编排顺序动画
useChain([ref1, ref2, ref3], [0, 0.5, 0.8]) 会按顺序播放多个弹簧或序列。第一个参数是 springRefs 数组,表示它们应该播放的顺序。第二个参数是一个介于 0 和 1 之间的时间戳数组,表示每个弹簧在总时长的哪个比例处开始。
useChain 时间戳的含义
在 useChain 中,像 [0, 0.5] 这样的时间戳表示:第一个弹簧在序列进行到 0% 时开始,第二个弹簧在进行到 50% 时开始。可选的第三个参数是总时长,单位为毫秒,默认值为 1000ms。因此,当时间戳为 [0, 0.5] 且总时长为 2000ms 时,第一个弹簧在 0ms 开始,第二个弹簧在 1000ms 开始。
useChain 实用示例
一种常见模式是:先播放容器展开动画(使用 useSpring 控制大小),再播放容器内项目的淡入动画(使用 useTrail 控制列表)。将引用附加到两者,然后使用 useChain([sizeRef, trailRef], [0, 0.5]),让容器先展开,再在过渡到一半时让项目淡入。这样就能创建具有电影感的两阶段进入动画。
页面过渡模式
useChain 非常适合页面过渡。在页面之间导航时,可以将旧页面的退出动画与新页面的进入动画串联起来。先完成退出动画(时间戳为 0),然后开始进入动画(时间戳为 0.6)。这样可以实现平滑衔接,而不是突然切换。
使用 useTrail 实现视差效果
useTrail 可以根据项目在序列中的位置,让项目以不同速度播放动画,从而创建视差滚动效果。序列中位置更靠后的项目会更晚开始,并且可以使用不同的配置(较低的张力),使其移动得更慢。这种基于深度的时序模拟了不同距离物体的视差效果。
useTrail 的交错机制
useTrail 如何在动画项目之间创建交错延迟?
课程回顾:useTrail 与 useChain
useTrail(count, config) 会创建 count 个按顺序播放动画的弹簧,从而产生交错的列表进入效果。可以同时遍历序列和项目来进行渲染。useSpringRef() 会创建供 useChain 用于编排顺序的引用。useChain([ref1, ref2], [0, 0.5]) 会使用分数形式的时间戳编排多个弹簧。结合使用它们,就能实现先展开后显示等复杂的多阶段动画序列。
用 AI 导师学习 React — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 88
- 课程
- 324
常见问题解答
「使用 useTrail 和 useChain 实现序列动画」课时是免费的吗?
是的 — 「使用 useTrail 和 useChain 实现序列动画」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。
「使用 useTrail 和 useChain 实现序列动画」这节课中我会学到什么?
使用 useTrail 让多个元素的动画交错进行,并使用 useChain 编排动画序列 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 React Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「使用 useTrail 和 useChain 实现序列动画」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 React Academy 课中编写并运行代码吗?
能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- React Spring 基础:useSpring 钩子
- 动画组件与样式插值
- 使用 useTrail 和 useChain 实现序列动画
- 使用 use-gesture 实现手势驱动动画