Beweging voor React DOM · Animated API van React Native
Schrijf beweging één keer. Ze loopt soepel en breekt nooit.
Animated brengt Animated van React Native naar het web. Eén waarde stuurt een willekeurig aantal elementen aan zonder React-render per frame, ondersteunde beweging speelt de browser zelf af, en elke onderbreking gaat verder vanaf wat op het scherm staat.
npm install @kkwaenggwari/animatedEén klokwaarde stuurt de rimpeling van alle 64 vormen aan. Beweeg je aanwijzer over het podium.
Gemeten op deze release
Gemeten met de 1.0.0-build in headless Chrome op een desktop-PC. De getallen verschillen per apparaat. Hoe we hebben gemeten
- 0.00msJavaScript per frame terwijl 400 elementen bewegen
Eindige transform- en opacity-beweging op Animated-elementen speelt de browser af. De eigen frame-callbacks van de pagina doen geen werk.
- 0.13msJavaScript per frame als één waarde 10.000 elementen aanstuurt
De waarde schrijft één CSS-variabele; elk element leidt zijn stijl daar in CSS van af.
- 0React-renders tijdens beweging
Waarden gaan nooit door React-state. Componenten renderen als jouw props veranderen, niet als een frame verandert.
01 · Makkelijk
De API die je al kent, op gewone React-style
timing, spring, interpolate, loop en Animated.event houden de namen en configuraties van React Native. Een waarde gaat rechtstreeks in een gewone style-prop, dus er is geen speciaal component om te leren voor je eerste beweging.
- Port React Native-code door
Animated.Viewte hernoemen naarAnimated.div. - Eén waarde kan tegelijk een balk, een draaiknop en een rij kaarten bewegen, elk met een eigen bereik.
useAnimatedbezit het recept: het start bij mount, start opnieuw als een afhankelijkheid verandert en ruimt op bij unmount.
Voorbeeld voorbereiden…
Dezelfde aanroepen als in 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 · Snel
Geen React-render per frame
Een hookwaarde is een CSS-variabele. Lineaire interpolaties en rekenkunde worden exacte calc()-expressies van die variabele, dus elk frame is één schrijfactie en de browser leidt de rest af. Eindige transform- en opacity-beweging op Animated.<tag>-elementen speelt de browser af zonder frame-callbacks.
- Verander het aantal stippen: de teller laat zien dat React één keer per wijziging rendert, nooit per frame.
scopeschrijft de waarde één keer op een container in plaats van op elk element.inspect(element)vertelt welk pad elke eigenschap gebruikt en waarom.
Voorbeeld voorbereiden…
03 · Stabiel
Onderbreek het waar je wilt. Het gaat door.
Een nieuw doel begint waar het element op het scherm staat, en een veer behoudt ook zijn snelheid, dus halverwege omkeren draait soepel in plaats van eerst te stoppen. Controllers die in een hook zijn gedeclareerd, worden gestopt en vrijgegeven bij vervanging en unmount, en server-gerenderde markup blijft na hydration animeren.
- Klik twee keer snel: met
springbuigt de baan, mettimingblijft de positie maar begint een nieuwe curve. - Stoppen laat de waarde staan waar ze is; niets springt naar een eindtoestand.
- Geen achtergebleven frame-lussen na unmount, routewissel of verborgen tabblad.
Voorbeeld voorbereiden…
- Magnetisch dockIconen groeien als de aanwijzer passeert, duwen hun buren opzij en komen tot rust als hij vertrekt.
moveInputfollowuseAnimatedCSSmultiply - VeegstapelSleep de bovenste kaart. Voorbij de drempel vliegt hij weg; anders veert hij terug.
dragInputuseAnimatedListenerAnimated.div - Gedeelde galerijEen tegel groeit uit tot detailweergave en krimpt terug in het raster.
Animated.SceneAnimated.Keepmove
Gebouwd op Animated
Een kant-en-klaar component nodig? Animated Chorus.
Rollende getallen, meeverhuizende tabmarkeringen, voortgang, sheets en geanimeerde lijsten die direct in React en React Native passen. Deze drie draaien nu op deze pagina.
Naar Animated ChorusBegin in drie minuten
Installeer het pakket, beweeg je eerste waarde en kies dan een gids voor de klus die voor je ligt.
npm install @kkwaenggwari/animated