MotionNumber · MotionText
Un número cuyas cifras ruedan como ruedas, incluidas las que aparecen o desaparecen.
WebReact NativeNúmeros y texto
Pruébalo
Preparando el ejemplo…
Uso mínimo
<MotionNumber value={count} />
<MotionNumber value={total} mode="roll" intl locale="en-US"
format={{ style: 'currency', currency: 'USD' }} />
<MotionText>{status}</MotionText>Lo que resuelve por ti
- Acarreos:
999 → 1,000hace rodar en el mismo sentido cada cifra que cambia, como un cuentakilómetros. - Las cifras que aparecen o desaparecen entran y salen rodando en su propia columna en lugar de saltar.
- Los separadores, los signos y los símbolos de moneda aparecen y desaparecen con la cifra a la que pertenecen.
- Las cifras que se quedan se desplazan a su nueva posición mientras ruedan, así que el número nunca se parte.
- Un valor nuevo a mitad de movimiento continúa exactamente desde lo que se ve en pantalla.
- El formato nunca requiere
Intl: pasa texto o una funciónformat, o actívalo conintl.
Úsalo para
- El total de un carrito que cambia al añadir artículos.
- Un contador o marcador en vivo.
- Una cifra de panel que se actualiza cada pocos segundos.
Props
MotionNumber
| Prop | Tipo | Por defecto | Descripción |
|---|---|---|---|
value | number | bigint | string | —obligatoria | El número, o texto numérico ya formateado por quien llama. |
mode | 'replace' | 'roll' | 'replace' | replace mueve un paso cada cifra que cambia; roll pasa por los dígitos intermedios. |
direction | 'auto' | 'digit' | 'up' | 'down' | 'auto' | auto sigue el cambio de magnitud para que los acarreos rueden en un sentido; digit compara cada cifra por separado. |
stagger | number | 45 | Milisegundos entre cifras que cambian, desde las unidades hacia fuera. La onda completa está acotada. |
format | (value) => string | Intl.NumberFormatOptions | Una función que devuelve el texto que se muestra, u opciones de Intl.NumberFormat (con intl). | |
intl | boolean | false | Usa el Intl.NumberFormat integrado. Desactivado por defecto para que ningún entorno necesite Intl. |
locale | string | string[] | Configuración regional para intl. | |
prefix | string | Texto antes del número. | |
suffix | string | Texto después del número. | |
transition | Transition | spring | Una curva de tiempo { duration, easing } o un resorte { tempo: 'spring', spring }. Los resortes conservan su impulso cuando se interrumpen. |
onMotionComplete | (value) => void | Se ejecuta con el valor cuando las cifras se han asentado. |
MotionText
| Prop | Tipo | Por defecto | Descripción |
|---|---|---|---|
children | ReactNode | El texto que se muestra. | |
as | element | 'span' | El elemento que se renderiza. |
transition | Transition | spring | Una curva de tiempo { duration, easing } o un resorte { tempo: 'spring', spring }. Los resortes conservan su impulso cuando se interrumpen. |
onMotionComplete | (text) => void | Se ejecuta cuando el movimiento se asienta. |
Las demás props van al elemento renderizado, así que className, style y los manejadores de eventos funcionan como siempre.
Web y React Native
En la web, cada cifra es una pequeña pila de glifos reproducida por la Web Animations API, y el texto sigue siendo seleccionable. MotionText anima cualquier texto: el texto numérico rueda por cifras y el resto se intercambia.
En React Native, el número sigue siendo un Text real para el layout, la selección y la accesibilidad, incluidos el ajuste de línea y numberOfLines; los glifos se mueven con el driver nativo.
Se usa en estos ejemplos
- Resumen del pagoLas cantidades, los subtotales y el total ruedan cuando cambia el carrito; el aviso del cupón entra y sale; pagar requiere mantener pulsado a propósito.
MotionListMotionNumberMotionPresenceMotionHold - Bandeja de entradaPestañas de filtro con recuentos en vivo, filas que se pueden apartar deslizando y una lista que cierra el hueco.
MotionHighlightMotionListMotionSwipeMotionNumber