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.

Installeren
npm install @kkwaenggwari/animated

Eé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.View te hernoemen naar Animated.div.
  • Eén waarde kan tegelijk een balk, een draaiknop en een rij kaarten bewegen, elk met een eigen bereik.
  • useAnimated bezit 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

Spinner.jsx
// 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.
  • scope schrijft 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 spring buigt de baan, met timing blijft 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…

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 Chorus

Begin 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

Zoeken

Typ om de documentatie te doorzoeken.