全部组件

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;字形由原生驱动移动。

用到它的示例

搜索

输入关键词搜索文档。