MotionNumber · MotionText
Un numero le cui cifre scorrono come rotelle, comprese le cifre che compaiono o spariscono.
WebReact NativeNumeri e testo
Provalo
Preparazione dell’esempio…
L’uso più breve
<MotionNumber value={count} />
<MotionNumber value={total} mode="roll" intl locale="en-US"
format={{ style: 'currency', currency: 'USD' }} />
<MotionText>{status}</MotionText>Di che cosa si occupa al posto tuo
- Riporti:
999 → 1,000fa scorrere nello stesso modo ogni cifra cambiata, come un contachilometri. - Le cifre che compaiono o spariscono entrano o escono scorrendo nella loro colonna invece di apparire di colpo.
- Separatori, segni e simboli di valuta compaiono e svaniscono insieme alla cifra a cui appartengono.
- Le cifre rimanenti scivolano nelle nuove posizioni mentre scorrono, così il numero non si spezza mai.
- Un nuovo valore a metà movimento riparte esattamente da ciò che è sullo schermo.
- La formattazione non richiede mai
Intl: passa un testo o una funzioneformat, oppure attivalo conintl.
Usalo per
- Il totale di un carrello che cambia man mano che aggiungi articoli.
- Un contatore o un punteggio dal vivo.
- Un dato di una dashboard che si aggiorna ogni pochi secondi.
Props
MotionNumber
| Prop | Tipo | Predefinito | Descrizione |
|---|---|---|---|
value | number | bigint | string | —obbligatoria | Il numero, oppure un testo numerico formattato da te. |
mode | 'replace' | 'roll' | 'replace' | replace sposta ogni cifra cambiata di un passo; roll passa per i numeri intermedi. |
direction | 'auto' | 'digit' | 'up' | 'down' | 'auto' | auto segue la variazione di grandezza, così i riporti scorrono in un solo verso; digit confronta ogni cifra per conto suo. |
stagger | number | 45 | Millisecondi tra le cifre cambiate, dalle unità verso l’esterno. L’intera onda ha una durata limitata. |
format | (value) => string | Intl.NumberFormatOptions | Una funzione che restituisce il testo da mostrare, oppure le opzioni di Intl.NumberFormat (con intl). | |
intl | boolean | false | Usa l’Intl.NumberFormat integrato. Disattivato di default, così nessun runtime ha bisogno di Intl. |
locale | string | string[] | Locale per intl. | |
prefix | string | Testo prima del numero. | |
suffix | string | Testo dopo il numero. | |
transition | Transition | spring | Una curva di timing { duration, easing } o una molla { tempo: 'spring', spring }. Le molle conservano lo slancio quando vengono interrotte. |
onMotionComplete | (value) => void | Viene eseguito con il valore quando le cifre si sono assestate. |
MotionText
| Prop | Tipo | Predefinito | Descrizione |
|---|---|---|---|
children | ReactNode | Il testo da mostrare. | |
as | element | 'span' | L’elemento da renderizzare. |
transition | Transition | spring | Una curva di timing { duration, easing } o una molla { tempo: 'spring', spring }. Le molle conservano lo slancio quando vengono interrotte. |
onMotionComplete | (text) => void | Viene eseguito quando il movimento si assesta. |
Le altre props vanno all’elemento renderizzato, quindi className, style e gli event handler funzionano come sempre.
Web e React Native
Sul web ogni cifra è una piccola pila di glifi riprodotta dalla Web Animations API, e il testo resta selezionabile. MotionText anima qualsiasi testo: il testo numerico scorre cifra per cifra, il resto viene scambiato.
Su React Native il numero resta un vero Text per layout, selezione e accessibilità, compresi l’a capo e numberOfLines; i glifi si muovono sul driver nativo.
Usato in questi esempi
- Riepilogo del checkoutQuantità, totali di riga e totale scorrono man mano che il carrello cambia; l’avviso del coupon entra ed esce; pagare richiede di tenere premuto di proposito.
MotionListMotionNumberMotionPresenceMotionHold - Posta in arrivoTab di filtro con conteggi dal vivo, righe da scartare con lo swipe e una lista che chiude il vuoto.
MotionHighlightMotionListMotionSwipeMotionNumber