React · React Native · 16 componente
Interacțiuni grele, rezolvate.
Animated Chorus este un set de componente de mișcare pentru interacțiunile greu de făcut corect de mână: numere care se rotesc, text transmis în flux, schimbări care se redimensionează, sheet-uri, pagere, acțiuni prin glisare și liste care animă doar ce s-a schimbat. Un tag și datele dumneavoastră. Fără provider, fără configurare.
npm install @kkwaenggwari/animated-chorusMăsurat pe această versiune
Chrome, 2026-09-28. Toate condițiile și eșantioanele sunt în ghidul de performanță. Cum s-a măsurat
- 28.0KBKB gzip pentru toate cele 16 exporturi
Întregul punct de intrare web, minimizat. React este singurul peer.
- 0Callback-uri de cadru JS în timpul animației
Un număr, o înălțime și un evidențiator se schimbă împreună: browserul redă toate cele 12 animații.
- 1Commit React per schimbare de valoare
MotionNumberse randează când se schimbă valoarea, niciodată cât se rotește. - 11Commit-uri React pentru 3000 caractere transmise în flux
MotionStreamadaugă caracterele direct și le integrează în React de câteva ori pe secundă.
01Cel mai simplu
Un tag și datele dumneavoastră
Fiecare componentă funcționează singură: fără provider, componentă de înveliș sau apel de configurare. Colecțiile primesc items și renderItem, iar layoutul, textul și stilurile rămân ale dumneavoastră.
- Importați o componentă și transmiteți o valoare. Asta e toată integrarea.
- Listele, filele și pagerele vă citesc tabloul; key-urile sunt implicit
item.id. - Textul rămâne text real: se încadrează pe rânduri, se scalează cu fontul și poate fi selectat.
<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} />;
Șase componente live și linia de cod din spatele fiecăreia.
Se pregătește exemplul…
02Cel mai rapid
Browserul redă. React stă pe loc.
Pe web nu trebuie încărcată nicio bibliotecă de animație: componentele își predau mișcarea către Web Animations API, așa că un număr care se rotește sau un panou care se redimensionează nu costă JavaScript per cadru și nici randare React cât se mișcă.
- 0 callback-uri de cadru JS cât rulează împreună 12 animații.
- Un commit React per schimbare de valoare, nu unul per cadru.
- Text în flux: 11 commit-uri React pentru 3000 caractere. Exemplul de mai jos își numără propriile randări.
Se pregătește exemplul…
03Cel mai stabil
Întrerupeți orice. Nu sare niciodată.
Fiecare valoare nouă pornește de la ce e pe ecran, iar arcurile își păstrează viteza, așa că clicurile rapide, rafalele de date și inversările par intenționate. Când mișcarea se încheie, nu mai rulează nimic.
- Numerele nu se despart niciodată: cifrele rămase alunecă în timp ce se rotesc.
- 200 valori noi la 5 ms una de alta: după aceea rămân 0 animații, iar textul final este exact.
- Sigur sub React StrictMode. Într-o aplicație React Native în fundal, mișcarea se așază la starea finală.
Se pregătește exemplul…
16 componente, grupate după treaba pe care o fac
Numere și text, conținut care își schimbă mărimea, selecție, liste, gesturi, suprapuneri și progres. Fiecare are un banc de lucru live cu props alături.
Toate componenteleNumere și text
Conținut și mărime
Selecție și paginare
Liste
Gesturi
Suprapuneri
Progres
Puse laolaltă
Ecrane complete care combină mai multe componente, fiecare cu setările în afara exemplului.
Toate exemplele- Răspuns în chatSugestii care se pliază, un răspuns transmis într-un ritm constant și o linie de status care se schimbă.
MotionStreamMotionListMotionSwapMotionHeight - Rezumatul comenziiCantitățile, totalurile pe rând și totalul se rotesc când se schimbă coșul; notificarea de cupon intră și pleacă; plata cere o apăsare lungă deliberată.
MotionListMotionNumberMotionPresenceMotionHold - InboxFile de filtrare cu contoare live, rânduri care pot fi glisate deoparte și o listă care închide golul.
MotionHighlightMotionListMotionSwipeMotionNumber - Flux de fotografiiGlisați printre fotografii, săriți cu miniaturi, deschideți orice fotografie pe tot ecranul și trageți în sus detaliile.
MotionPagerMotionHighlightMotionZoomMotionSheet
Același import pe web și în React Native
Metro alege implementarea nativă, iar bundlerele web pe cea DOM. Fiecare platformă redă mișcarea în felul care îi reușește cel mai bine.
// 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ări și opacitate | Web Animations API, arcuri eșantionate analitic | Animated cu driverul nativ |
| Lățime și înălțime | Web Animations API | Animated cu driverul JS, pentru că e layout |
| Text în flux | Caractere adăugate și apărute treptat; câteva randări React pe secundă | Un Text real, afișat fără estompare |
| Sheet-uri și zoom | Un dialog nativ în stratul superior | Un Modal transparent; butonul înapoi îl închide |
Începeți în două minute
Instalați, importați o componentă, transmiteți o valoare.
npm install @kkwaenggwari/animated-chorus