指南 · 01
过渡
每个组件都接收一个 transition:时间曲线或弹簧。如何选择,以及动效被打断时会发生什么。
两种过渡
过渡要么是 { duration, easing },要么是 { tempo: 'spring', spring }。把它传给任意组件的 transition prop。同时移动多种东西的组件会接收第二个 prop,例如 MotionList 上用于让项滑到新位置的 layoutTransition。
transitions.js
{ duration: 300, easing: 'easeOut' }
{ duration: 600, easing: [0.22, 1, 0.36, 1] }
{ tempo: 'spring', spring: { stiffness: 260, damping: 12 } }
{ tempo: 'spring', spring: { stiffness: 260, damping: 12 }, duration: 500 }
指定时长的弹簧
弹簧通常会按物理需要运行多久就多久。加上 duration 后,弹簧会被校准为恰好在那一刻停稳,在符合你的时间安排的同时保留自身特性(回弹的程度)。在下面三个组件上用相同条件比较时间曲线和弹簧。
打断
每个组件都从屏幕上的当前状态开始新的动效。弹簧还会保留当前速度,所以第二次点击会平滑地反转。时间曲线则从当前位置以一条新曲线重新开始。
- 数字:新值从屏幕上的字形继续。
- 高度和切换:尺寸从屏幕上的当前尺寸继续。
- 列表:移向新位置的项保留速度。
现成的过渡
motionTokens 收集了几种风格一致的手感:四种弹簧、四种时间曲线和四种时长。它们都是普通对象,可以展开后只修改一个字段。
tokens.jsimport { motionTokens } from '@kkwaenggwari/animated-chorus';
motionTokens.spring.quick;
motionTokens.spring.basic;
motionTokens.spring.gentle;
motionTokens.spring.bouncy;
motionTokens.easing.expoOut;
motionTokens.duration.fast;
缓动名称
easing 接受 linear、in、out、inOut、ease、easeIn、easeOut、easeInOut、expoOut、backOut,或像 [0.22, 1, 0.36, 1] 这样的三次贝塞尔数组。