Animationen für React DOM · React Native Animated API

Bewegung einmal schreiben. Sie läuft flüssig und bricht nie.

Animated bringt das Animated von React Native ins Web. Ein Wert bewegt beliebig viele Elemente ohne React-Render pro Frame, unterstützte Bewegung spielt der Browser selbst ab, und jede Unterbrechung setzt dort an, was auf dem Bildschirm ist.

Installieren
npm install @kkwaenggwari/animated

Ein Uhr-Wert steuert die Welle aller 64 Formen. Beweg den Zeiger über die Bühne.

Gemessen an diesem Release

Gemessen mit dem Build 1.0.0 in Headless Chrome auf einem Desktop-PC. Die Zahlen variieren je nach Gerät. So haben wir gemessen

  • 0.00msJavaScript pro Frame, während sich 400 Elemente bewegen

    Endliche transform- und opacity-Bewegung auf Animated-Elementen spielt der Browser ab. Die eigenen Frame-Callbacks der Seite tun nichts.

  • 0.13msJavaScript pro Frame für einen Wert, der 10.000 Elemente bewegt

    Der Wert schreibt eine CSS-Variable; jedes Element leitet seinen Style in CSS daraus ab.

  • 0React-Renders während der Bewegung

    Werte laufen nie durch React-State. Komponenten rendern, wenn sich deine props ändern, nicht wenn sich ein Frame ändert.

01 · Einfach

Die API, die du schon kennst, auf normalem React-Style

timing, spring, interpolate, loop und Animated.event behalten ihre Namen und Optionen aus React Native. Ein Wert kommt direkt in eine normale style-Prop – vor deiner ersten Animation musst du keine spezielle Komponente lernen.

  • Portiere React-Native-Code, indem du Animated.View in Animated.div umbenennst.
  • Ein Wert kann einen Balken, einen Drehregler und eine Reihe Karten gleichzeitig bewegen, jeweils mit eigenem Bereich.
  • useAnimated verwaltet das Rezept: Es startet beim Mount, startet neu, wenn sich eine Abhängigkeit ändert, und räumt beim Unmount auf.

Beispiel wird vorbereitet…

Dieselben Aufrufe wie 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 · Schnell

Kein React-Render pro Frame

Ein Hook-Wert ist eine CSS-Variable. Lineare Interpolationen und Arithmetik werden zu exakten calc()-Ausdrücken dieser Variablen, sodass jeder Frame ein einziger Schreibvorgang ist und der Browser den Rest ableitet. Endliche transform- und opacity-Bewegung auf Animated.<tag>-Elementen spielt der Browser ohne Frame-Callbacks ab.

  • Ändere die Anzahl der Punkte: Der Zähler zeigt, dass React einmal pro Änderung rendert, nie pro Frame.
  • scope schreibt den Wert einmal auf einen Container statt auf jedes Element.
  • inspect(element) zeigt dir, welchen Weg jede Eigenschaft nimmt und warum.

Beispiel wird vorbereitet…

03 · Stabil

Unterbrich es irgendwo. Es geht weiter.

Ein neues Ziel startet dort, wo das Element auf dem Bildschirm ist, und eine Feder behält zusätzlich ihre Geschwindigkeit – Umkehren mitten im Flug dreht also weich, statt erst anzuhalten. In einem Hook deklarierte Controller werden beim Ersetzen und beim Unmount gestoppt und freigegeben, und serverseitig gerendertes Markup animiert nach der Hydration weiter.

  • Klick zweimal schnell: Mit spring biegt sich die Bahn, mit timing bleibt die Position erhalten, aber eine neue Kurve beginnt.
  • Stoppen lässt den Wert, wo er ist; nichts springt in einen Endzustand.
  • Keine verwaisten Frame-Schleifen nach Unmount, Routenwechsel oder ausgeblendeten Tabs.

Beispiel wird vorbereitet…

Gebaut mit Animated

Du brauchst eine fertige Komponente? Animated Chorus.

Rollende Zahlen, wandernde Tab-Hervorhebungen, Fortschritt, Sheets und animierte Listen, die sich direkt in React und React Native einsetzen lassen. Diese drei laufen gerade auf dieser Seite.

Zu Animated Chorus

In drei Minuten loslegen

Installiere das Paket, bewege deinen ersten Wert und wähle dann einen Guide für deine aktuelle Aufgabe.

npm install @kkwaenggwari/animated

Suchen

Tippe, um die Dokumentation zu durchsuchen.