すべてのコンポーネント

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 は変わった桁を 1 段だけ動かし、roll は途中の数字を通って回ります。
direction'auto' | 'digit' | 'up' | 'down''auto'auto は大きさの変化に従うので繰り上がりが同じ向きに回り、digit は桁ごとに個別に比較します。
staggernumber45変わった桁どうしの間隔(ミリ秒)。1 の位から外側へ。波全体の長さには上限があります。
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 もそのまま使えます。グリフはネイティブドライバーで動きます。

使っているサンプル

検索

入力するとドキュメントを検索します。