Rörelse för React DOM · React Natives Animated API
Skriv rörelse en gång. Den går mjukt och går aldrig sönder.
Animated tar React Natives Animated till webben. Ett värde styr hur många element som helst utan React-rendering per bildruta, stödd rörelse spelas upp av webbläsaren själv och varje avbrott fortsätter från det som syns på skärmen.
npm install @kkwaenggwari/animatedEtt klockvärde styr krusningen i alla 64 former. Rör pekaren över scenen.
Uppmätt på den här versionen
Uppmätt med 1.0.0-bygget i headless Chrome på en stationär PC. Siffrorna varierar mellan enheter. Så mätte vi
- 0.00msJavaScript per bildruta medan 400 element rör sig
Ändlig transform- och opacity-rörelse på Animated-element spelas upp av webbläsaren. Sidans egna bildrute-callbacks gör inget arbete.
- 0.13msJavaScript per bildruta när ett värde styr 10 000 element
Värdet skriver en CSS-variabel; varje element härleder sin stil från den i CSS.
- 0React-renderingar under rörelse
Värden går aldrig genom React-state. Komponenter renderas när dina props ändras, inte när en bildruta ändras.
01 · Enkelt
API:t du redan kan, på vanlig React-style
timing, spring, interpolate, loop och Animated.event behåller React Natives namn och konfigurationer. Ett värde går direkt in i en vanlig style-prop, så det finns ingen specialkomponent att lära sig före din första rörelse.
- Porta React Native-kod genom att byta namn på
Animated.ViewtillAnimated.div. - Ett värde kan flytta en stapel, en ratt och en rad kort samtidigt, var och en med sitt eget intervall.
useAnimatedäger receptet: den startar vid mount, startar om när ett beroende ändras och städar vid unmount.
Förbereder exemplet…
Samma anrop 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 · Snabbt
Ingen React-rendering per bildruta
Ett hookvärde är en CSS-variabel. Linjära interpoleringar och aritmetik blir exakta calc()-uttryck av den variabeln, så varje bildruta är en skrivning och webbläsaren härleder resten. Ändlig transform- och opacity-rörelse på Animated.<tag>-element spelas upp av webbläsaren utan bildrute-callbacks.
- Ändra antalet punkter: räknaren visar att React renderade en gång per ändring, aldrig per bildruta.
scopeskriver värdet en gång på en container i stället för på varje element.inspect(element)berättar vilken väg varje egenskap använder och varför.
Förbereder exemplet…
03 · Stabilt
Avbryt var som helst. Den fortsätter.
Ett nytt mål startar där elementet är på skärmen, och en fjäder behåller dessutom sin hastighet, så att vända mitt i rörelsen svänger mjukt i stället för att först stanna. Controllers som deklareras i en hook stoppas och släpps vid ersättning och unmount, och serverrenderad markup fortsätter animera efter hydrering.
- Klicka två gånger snabbt: med
springböjer banan av, medtimingbehålls positionen men en ny kurva börjar. - Att stoppa lämnar värdet där det är; ingenting hoppar till ett sluttillstånd.
- Inga kvarglömda bildruteloopar efter unmount, ruttbyten eller dolda flikar.
Förbereder exemplet…
- Magnetisk dockaIkonerna växer när pekaren passerar, knuffar undan grannarna och lägger sig när den lämnar.
moveInputfollowuseAnimatedCSSmultiply - SvepkortlekDra det översta kortet. Förbi tröskeln flyger det iväg; annars fjädrar det tillbaka.
dragInputuseAnimatedListenerAnimated.div - Delat galleriEn ruta växer till en detaljvy och krymper tillbaka in i rutnätet.
Animated.SceneAnimated.Keepmove
Byggt på Animated
Behöver du en färdig komponent? Animated Chorus.
Rullande siffror, flikmarkeringar som flyttar sig, förlopp, sheets och animerade listor som passar rakt in i React och React Native. De här tre körs på sidan just nu.
Besök Animated ChorusKom igång på tre minuter
Installera paketet, flytta ditt första värde och välj sedan en guide för uppgiften framför dig.
npm install @kkwaenggwari/animated