所有元件
MotionNumber · MotionText
每一位都像滾輪一樣轉動的數字,包括新增或消失的位數。
WebReact Native數字與文字
動手試試
最簡用法
Total.jsx<MotionNumber value={count} />
<MotionNumber value={total} mode="roll" intl locale="en-US"
format={{ style: 'currency', currency: 'USD' }} />
<MotionText>{status}</MotionText>
它替你處理的事
- 進位:
999 → 1,000 會讓每個改變的位數朝同一方向滾動,就像里程表。 - 新增或消失的位數會在自己的欄中滾進滾出,而不是突然出現或消失。
- 分隔符號、正負號與貨幣符號會隨所屬的位數一起淡入淡出。
- 保留的位數會一邊滾動一邊滑到新位置,所以數字從不斷開。
- 動態進行中的新值會從畫面上的當下狀態準確地繼續。
- 格式化從不依賴
Intl:傳入文字或 format 函式,或以 intl 主動開啟。
適用情境
- 隨著加入商品而變化的購物車總額。
- 即時計數器或比分。
- 每隔幾秒更新一次的儀表板數字。
Props
MotionNumber
| Prop | 型別 | 預設值 | 說明 |
|---|
value | number | bigint | string | —必填 | 數字,或由呼叫端格式化好的數字文字。 |
|---|
mode | 'replace' | 'roll' | 'replace' | replace 讓每個改變的位數移動一格;roll 會經過中間的數字。 |
|---|
direction | 'auto' | 'digit' | 'up' | 'down' | 'auto' | auto 依數值大小的變化,讓進位朝同一方向滾動;digit 讓每一位各自比較。 |
|---|
stagger | number | 45 | 改變的位數之間的毫秒間隔,從個位往外。整個漣漪的時長有上限。 |
|---|
format | (value) => string | Intl.NumberFormatOptions | | 回傳要顯示之文字的函式,或 Intl.NumberFormat 選項(搭配 intl)。 |
|---|
intl | boolean | false | 使用內建的 Intl.NumberFormat。預設關閉,讓任何執行環境都不必依賴 Intl。 |
|---|
locale | string | string[] | | intl 使用的地區設定。 |
|---|
prefix | string | | 數字前的文字。 |
|---|
suffix | string | | 數字後的文字。 |
|---|
transition | Transition | spring | 時間曲線 { duration, easing } 或彈簧 { tempo: 'spring', spring }。彈簧被中斷時會保留動量。 |
|---|
onMotionComplete | (value) => void | | 各位數停穩後,帶著該值執行。 |
|---|
MotionText
| Prop | 型別 | 預設值 | 說明 |
|---|
children | ReactNode | | 要顯示的文字。 |
|---|
as | element | 'span' | 要渲染的元素。 |
|---|
transition | Transition | spring | 時間曲線 { duration, easing } 或彈簧 { tempo: 'spring', spring }。彈簧被中斷時會保留動量。 |
|---|
onMotionComplete | (text) => void | | 動態停穩時執行。 |
|---|
其他 props 會傳給渲染的元素,所以 className、style 與事件處理函式照常可用。