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.

Installera
npm install @kkwaenggwari/animated

Ett 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.View till Animated.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

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 · 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.
  • scope skriver 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 spring böjer banan av, med timing behå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…

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 Chorus

Kom 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

Sök

Skriv för att söka i dokumentationen.