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.

Installer
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.View nytt navn til Animated.div.
  • Én verdi kan flytte en stolpe, en dreieknapp og en rad med kort samtidig, hver med sitt eget intervall.
  • useAnimated eier 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

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 · 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.
  • scope skriver 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 spring bøyer banen av, med timing beholdes 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 …

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 Chorus

Kom 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

Søk

Skriv for å søke i dokumentasjonen.