React · React Native · 16 componenti
Interazioni difficili, già pronte.
Animated Chorus è un insieme di componenti di movimento per le interazioni difficili da fare bene a mano: numeri che scorrono, testo in streaming, scambi che si ridimensionano, sheet, pager, azioni con lo swipe e liste che animano solo ciò che è cambiato. Un tag e i tuoi dati. Niente provider, niente configurazione.
npm install @kkwaenggwari/animated-chorusMisurato su questa build
Chrome, 2026-09-28. Tutte le condizioni e i campioni sono nella guida alle prestazioni. Come è stato misurato
- 28.0KBKB gzip per tutti i 16 export
L’intera entry web, minificata. React è l’unica peer dependency.
- 0Callback di frame JS durante l’animazione
Un numero, un’altezza e un’evidenziazione che cambiano insieme: il browser riproduce tutte le 12 animazioni.
- 1Commit di React per ogni cambio di valore
MotionNumbersi renderizza quando il valore cambia, mai mentre scorre. - 11Commit di React per 3000 caratteri in streaming
MotionStreamaggiunge i caratteri direttamente e li integra in React poche volte al secondo.
01Il più semplice
Un tag e i tuoi dati
Ogni componente funziona da solo: nessun provider, componente wrapper o chiamata di configurazione. Le collezioni prendono items e renderItem, e layout, testi e stili restano tuoi.
- Importa un componente e passagli un valore. Questa è tutta l’integrazione.
- Liste, tab e pager leggono il tuo array; le key sono
item.iddi default. - Il testo resta testo vero: va a capo, si adatta al font e si può selezionare.
<MotionNumber value={total} />;<MotionSwap value={status}>{label}</MotionSwap>;<MotionHeight open={open}>{details}</MotionHeight>;<MotionHighlight items={tabs} value={tab} onValueChange={setTab} />;<MotionList items={tasks} renderItem={(task) => task.title} />;<ProgressRing value={progress} />;
Sei componenti dal vivo, e la riga di codice dietro ciascuno.
Preparazione dell’esempio…
02Il più veloce
Lo riproduce il browser. React resta fermo.
Sul web non c’è nessuna libreria di animazione da caricare: i componenti affidano il movimento alla Web Animations API, quindi un numero che scorre o un pannello che si ridimensiona non costano JavaScript per frame né render di React mentre si muovono.
- 0 callback di frame JS mentre 12 animazioni girano insieme.
- Un commit di React per ogni cambio di valore, non uno per frame.
- Testo in streaming: 11 commit di React per 3000 caratteri. L’esempio qui sotto conta i propri render.
Preparazione dell’esempio…
03Il più stabile
Interrompi qualsiasi cosa. Non salta mai.
Ogni nuovo valore parte da ciò che è sullo schermo e le molle conservano la velocità, così clic rapidi, raffiche di dati e inversioni sembrano intenzionali. Quando il movimento finisce, non resta nulla in esecuzione.
- I numeri non si spezzano mai: le cifre rimanenti scivolano mentre scorrono.
- 200 nuovi valori a 5 ms di distanza: 0 animazioni rimaste dopo, e il testo finale esatto.
- Sicuro con React StrictMode. In un’app React Native in background, il movimento si porta al suo stato finale.
Preparazione dell’esempio…
16 componenti, raggruppati per il lavoro che fanno
Numeri e testo, contenuti che cambiano dimensione, selezione, liste, gesti, overlay e avanzamento. Ognuno ha un banco di prova dal vivo con le sue props a lato.
Tutti i componentiNumeri e testo
Contenuto e dimensione
Selezione e pagine
Liste
Gesti
Overlay
Avanzamento
Messi insieme
Schermate complete che combinano più componenti, ognuna con le impostazioni fuori dall’esempio.
Tutti gli esempi- Risposta in chatSuggerimenti che si richiudono, una risposta che arriva in streaming a ritmo costante e una riga di stato che si scambia.
MotionStreamMotionListMotionSwapMotionHeight - 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 - Feed di fotoScorri tra le foto, salta con le miniature, apri qualsiasi foto a schermo intero e tira su i suoi dettagli.
MotionPagerMotionHighlightMotionZoomMotionSheet
Lo stesso import sul web e su React Native
Metro sceglie l’implementazione nativa e i bundler web quella DOM. Ogni piattaforma riproduce il movimento nel modo che le riesce meglio.
// Web and React Native: the same import.
import { MotionNumber, MotionList } from '@kkwaenggwari/animated-chorus';
export function Score({ points, players }) {
return (
<>
<MotionNumber value={points} />
<MotionList items={players} renderItem={(player) => player.name} />
</>
);
}| Parte | Web | React Native |
|---|---|---|
| Transform e opacity | Web Animations API, molle campionate in modo analitico | Animated con il driver nativo |
| Larghezza e altezza | Web Animations API | Animated con il driver JS, perché è layout |
| Testo in streaming | Caratteri aggiunti che compaiono in dissolvenza; pochi render di React al secondo | Un vero Text, rivelato senza dissolvenza |
| Sheet e zoom | Un dialog nativo nel top layer | Un Modal trasparente; il tasto Indietro lo chiude |
Inizia in due minuti
Installa, importa un componente, passagli un valore.
npm install @kkwaenggwari/animated-chorus