Bevægelse til React DOM · React Natives Animated API

Skriv bevægelse én gang. Den kører glat og går aldrig i stykker.

Animated bringer React Natives Animated til nettet. Én værdi styrer et vilkårligt antal elementer uden React-rendering pr. frame, understøttet bevægelse afspilles af browseren selv, og hver afbrydelse fortsætter fra det, der er på skærmen.

Installér
npm install @kkwaenggwari/animated

Én urværdi styrer krusningen i alle 64 former. Bevæg markøren hen over scenen.

Målt på denne version

Målt med 1.0.0-buildet i headless Chrome på en stationær PC. Tallene varierer efter enhed. Sådan målte vi

  • 0.00msJavaScript pr. frame, mens 400 elementer bevæger sig

    Endelig transform- og opacity-bevægelse på Animated-elementer afspilles af browseren. Sidens egne frame-callbacks udfører intet arbejde.

  • 0.13msJavaScript pr. frame, når én værdi styrer 10.000 elementer

    Værdien skriver én CSS-variabel; hvert element afleder sin stil fra den i CSS.

  • 0React-renderinger under bevægelse

    Værdier går aldrig gennem React-state. Komponenter renderes, når dine props ændrer sig, ikke når en frame ændrer sig.

01 · Nemt

API'et, du allerede kender, på almindelig React-style

timing, spring, interpolate, loop og Animated.event beholder React Natives navne og konfigurationer. En værdi går direkte ind i en almindelig style-prop, så der er ingen særlig komponent at lære før din første bevægelse.

  • Portér React Native-kode ved at omdøbe Animated.View til Animated.div.
  • Én værdi kan bevæge en bjælke, en drejeknap og en række kort på én gang, hver med sit eget interval.
  • useAnimated ejer opskriften: den starter ved mount, genstarter, når en afhængighed ændrer sig, og rydder op ved unmount.

Forbereder eksemplet…

De samme kald 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 · Hurtigt

Ingen React-rendering pr. frame

En hook-værdi er en CSS-variabel. Lineære interpolationer og aritmetik bliver eksakte calc()-udtryk af den variabel, så hver frame er én skrivning, og browseren afleder resten. Endelig transform- og opacity-bevægelse på Animated.<tag>-elementer afspilles af browseren uden frame-callbacks.

  • Ændr antallet af prikker: tælleren viser, at React renderede én gang pr. ændring, aldrig pr. frame.
  • scope skriver værdien én gang på en container i stedet for på hvert element.
  • inspect(element) fortæller, hvilken vej hver egenskab bruger, og hvorfor.

Forbereder eksemplet…

03 · Stabilt

Afbryd den hvor som helst. Den fortsætter.

Et nyt mål starter, hvor elementet er på skærmen, og en fjeder bevarer også sin hastighed, så at vende midt i bevægelsen drejer blødt i stedet for først at stoppe. Controllere, der er erklæret i en hook, stoppes og frigives ved udskiftning og unmount, og serverrenderet markup bliver ved med at animere efter hydrering.

  • Klik to gange hurtigt: med spring bøjer banen, med timing bevares positionen, men en ny kurve begynder.
  • At stoppe lader værdien blive, hvor den er; intet hopper til en sluttilstand.
  • Ingen efterladte frame-løkker efter unmount, ruteskift eller skjulte faner.

Forbereder eksemplet…

Bygget på Animated

Brug for en færdig komponent? Animated Chorus.

Rullende tal, fanemarkeringer, der flytter sig, fremskridt, sheets og animerede lister, der passer direkte ind i React og React Native. Disse tre kører på siden lige nu.

Besøg Animated Chorus

Kom i gang på tre minutter

Installér pakken, flyt din første værdi, og vælg derefter en guide til den opgave, du står med.

npm install @kkwaenggwari/animated

Søg

Skriv for at søge i dokumentationen.