全部组件
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 和事件处理函数照常可用。