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