指南 · 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] 這樣的三次貝茲陣列。

搜尋

輸入關鍵字搜尋文件。