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.
npm install @kkwaenggwari/animatedEin 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.ViewinAnimated.divumbenennst. - Ein Wert kann einen Balken, einen Drehregler und eine Reihe Karten gleichzeitig bewegen, jeweils mit eigenem Bereich.
useAnimatedverwaltet 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
// 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.
scopeschreibt 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
springbiegt sich die Bahn, mittimingbleibt 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…
Was du bauen kannst
Komplette Muster mit einstellbaren Optionen und dem vollständigen Quellcode.
Alle Beispiele- Magnetisches DockIcons wachsen, wenn der Zeiger vorbeistreicht, schieben ihre Nachbarn beiseite und kommen zur Ruhe, wenn er weg ist.
moveInputfollowuseAnimatedCSSmultiply - Wisch-StapelZieh die oberste Karte. Über der Schwelle fliegt sie weg, sonst federt sie zurück.
dragInputuseAnimatedListenerAnimated.div - Geteilte GalerieEine Kachel wächst zu einer Detailansicht und schrumpft zurück ins Raster.
Animated.SceneAnimated.Keepmove
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 ChorusIn 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