所有元件

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型別預設值說明
valuenumber | bigint | string—必填數字,或由呼叫端格式化好的數字文字。
mode'replace' | 'roll''replace'replace 讓每個改變的位數移動一格;roll 會經過中間的數字。
direction'auto' | 'digit' | 'up' | 'down''auto'auto 依數值大小的變化,讓進位朝同一方向滾動;digit 讓每一位各自比較。
staggernumber45改變的位數之間的毫秒間隔,從個位往外。整個漣漪的時長有上限。
format(value) => string | Intl.NumberFormatOptions回傳要顯示之文字的函式,或 Intl.NumberFormat 選項(搭配 intl)。
intlbooleanfalse使用內建的 Intl.NumberFormat。預設關閉,讓任何執行環境都不必依賴 Intl。
localestring | string[]intl 使用的地區設定。
prefixstring數字前的文字。
suffixstring數字後的文字。
transitionTransitionspring時間曲線 { duration, easing } 或彈簧 { tempo: 'spring', spring }。彈簧被中斷時會保留動量。
onMotionComplete(value) => void各位數停穩後,帶著該值執行。

MotionText

Prop型別預設值說明
childrenReactNode要顯示的文字。
aselement'span'要渲染的元素。
transitionTransitionspring時間曲線 { duration, easing } 或彈簧 { tempo: 'spring', spring }。彈簧被中斷時會保留動量。
onMotionComplete(text) => void動態停穩時執行。

其他 props 會傳給渲染的元素,所以 className、style 與事件處理函式照常可用。

Web 與 React Native

在 Web 上,每一位都是由 Web Animations API 播放的一小疊字形,文字仍可選取。MotionText 可以為任何文字加上動畫:數字文字依位數滾動,其他文字則切換。

在 React Native 上,數字仍是真正的 Text,版面、選取與無障礙功能都不受影響,包括換行與 numberOfLines;字形由原生驅動移動。

用到它的範例

搜尋

輸入關鍵字搜尋文件。