Bevegelse for React DOM · Animated-API-et fra React Native
Skriv bevegelse én gang. Den går jevnt og ødelegges aldri.
Animated bringer Animated fra React Native til nettet. Én verdi styrer et hvilket som helst antall elementer uten React-rendering per bilde, støttet bevegelse spilles av nettleseren selv, og hvert avbrudd fortsetter fra det som er på skjermen.
npm install @kkwaenggwari/animatedÉn klokkeverdi styrer krusningen i alle 64 formene. Beveg pekeren over scenen.
Målt på denne versjonen
Målt med 1.0.0-bygget i headless Chrome på en stasjonær PC. Tallene varierer mellom enheter. Slik målte vi
- 0.00msJavaScript per bilde mens 400 elementer beveger seg
Endelig transform- og opacity-bevegelse på Animated-elementer spilles av nettleseren. Sidens egne bilde-callbacks gjør ikke noe arbeid.
- 0.13msJavaScript per bilde når én verdi styrer 10 000 elementer
Verdien skriver én CSS-variabel; hvert element avleder stilen sin fra den i CSS.
- 0React-renderinger under bevegelse
Verdier går aldri gjennom React-state. Komponenter renderes når props endres, ikke når et bilde endres.
01 · Enkelt
API-et du allerede kan, på vanlig React-style
timing, spring, interpolate, loop og Animated.event beholder navnene og konfigurasjonene fra React Native. En verdi går rett inn i en vanlig style-prop, så du trenger ikke lære noen spesialkomponent før den første bevegelsen.
- Porter kode fra React Native ved å gi
Animated.Viewnytt navn tilAnimated.div. - Én verdi kan flytte en stolpe, en dreieknapp og en rad med kort samtidig, hver med sitt eget intervall.
useAnimatedeier oppskriften: den starter ved mount, starter på nytt når en avhengighet endres, og rydder opp ved unmount.
Forbereder eksempelet …
De samme kallene som i React Native
// React Native
<Animated.View style={{ transform: [{ rotate }] }} />
// React DOM with @kkwaenggwari/animated — the rest is identical
<Animated.div style={{ transform: [{ rotate }] }} />
const spin = useAnimatedValue(0);
const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: ['0deg', '360deg'] });
Animated.loop(
Animated.timing(spin, { toValue: 1, duration: 900, easing: Easing.linear, useNativeDriver: true }),
).start();02 · Raskt
Ingen React-rendering per bilde
En hook-verdi er en CSS-variabel. Lineære interpolasjoner og aritmetikk blir eksakte calc()-uttrykk av den variabelen, så hvert bilde er én skriving, og nettleseren avleder resten. Endelig transform- og opacity-bevegelse på Animated.<tag>-elementer spilles av nettleseren uten bilde-callbacks.
- Endre antall prikker: telleren viser at React renderte én gang per endring, aldri per bilde.
scopeskriver verdien én gang på en container i stedet for på hvert element.inspect(element)forteller hvilken vei hver egenskap bruker, og hvorfor.
Forbereder eksempelet …
03 · Stabilt
Avbryt hvor som helst. Den fortsetter.
Et nytt mål starter der elementet er på skjermen, og en fjær beholder også hastigheten, så å snu midt i bevegelsen svinger mykt i stedet for å stoppe først. Kontrollere som deklareres i en hook, stoppes og frigjøres ved utskifting og unmount, og serverrendret markup fortsetter å animere etter hydrering.
- Klikk to ganger raskt: med
springbøyer banen av, medtimingbeholdes posisjonen, men en ny kurve begynner. - Å stoppe lar verdien bli der den er; ingenting hopper til en sluttilstand.
- Ingen gjenglemte bildesløyfer etter unmount, ruteskifte eller skjulte faner.
Forbereder eksempelet …
- Magnetisk dokkIkoner vokser når pekeren passerer, skyver naboene til side og legger seg når den forlater.
moveInputfollowuseAnimatedCSSmultiply - SveipebunkeDra det øverste kortet. Forbi terskelen flyr det bort; ellers fjærer det tilbake.
dragInputuseAnimatedListenerAnimated.div - Delt galleriEn flis vokser til en detaljvisning og krymper tilbake i rutenettet.
Animated.SceneAnimated.Keepmove
Bygd på Animated
Trenger du en ferdig komponent? Animated Chorus.
Rullende tall, fanemarkeringer som flytter seg, fremdrift, sheets og animerte lister som passer rett inn i React og React Native. Disse tre kjører på siden akkurat nå.
Besøk Animated ChorusKom i gang på tre minutter
Installer pakken, flytt den første verdien, og velg så en guide for oppgaven foran deg.
npm install @kkwaenggwari/animated