指南 · 01

过渡

每个组件都接收一个 transition:时间曲线或弹簧。如何选择,以及动效被打断时会发生什么。

两种过渡

过渡要么是 { duration, easing },要么是 { tempo: 'spring', spring }。把它传给任意组件的 transition prop。同时移动多种东西的组件会接收第二个 prop,例如 MotionList 上用于让项滑到新位置的 layoutTransition。

transitions.js
// Timing: a duration and a curve.
{ duration: 300, easing: 'easeOut' }
{ duration: 600, easing: [0.22, 1, 0.36, 1] }

// Spring: physics that keeps its speed when interrupted.
{ tempo: 'spring', spring: { stiffness: 260, damping: 12 } }

// Spring with duration: calibrated to settle exactly then.
{ tempo: 'spring', spring: { stiffness: 260, damping: 12 }, duration: 500 }

指定时长的弹簧

弹簧通常会按物理需要运行多久就多久。加上 duration 后,弹簧会被校准为恰好在那一刻停稳,在符合你的时间安排的同时保留自身特性(回弹的程度)。在下面三个组件上用相同条件比较时间曲线和弹簧。

正在准备示例…

打断

每个组件都从屏幕上的当前状态开始新的动效。弹簧还会保留当前速度,所以第二次点击会平滑地反转。时间曲线则从当前位置以一条新曲线重新开始。

  • 数字:新值从屏幕上的字形继续。
  • 高度和切换:尺寸从屏幕上的当前尺寸继续。
  • 列表:移向新位置的项保留速度。

现成的过渡

motionTokens 收集了几种风格一致的手感:四种弹簧、四种时间曲线和四种时长。它们都是普通对象,可以展开后只修改一个字段。

tokens.js
import { motionTokens } from '@kkwaenggwari/animated-chorus';

motionTokens.spring.quick; // snappy UI feedback
motionTokens.spring.basic; // the default feel
motionTokens.spring.gentle; // panels and height
motionTokens.spring.bouncy; // playful numbers
motionTokens.easing.expoOut; // { duration: 420, easing: 'expoOut' }
motionTokens.duration.fast; // 140

缓动名称

easing 接受 linear、in、out、inOut、ease、easeIn、easeOut、easeInOut、expoOut、backOut,或像 [0.22, 1, 0.36, 1] 这样的三次贝塞尔数组。

搜索

输入关键词搜索文档。