Inhaltsverzeichnis
Flip und Waapi
Flip und reagieren
Dinge zu beachten
Bleiben Sie innerhalb von 100 Millisekunden
Unnötiges Rendering
Layout zittern
Animation abgesagt
Kämpfe nicht gegen den Browser
Bibliothek
Ressourcen und Referenzen
Heim Web-Frontend CSS-Tutorial Alles, was Sie über Flip -Animationen in React wissen müssen

Alles, was Sie über Flip -Animationen in React wissen müssen

Apr 05, 2025 am 09:12 AM

Alles, was Sie über Flip -Animationen in React wissen müssen

Nach dem neuesten Safari -Update wird die Webanimations -API (WAAPI) jetzt ohne Flaggen in allen modernen Browsern (außer IE) unterstützt. Hier finden Sie ein praktisches Beispiel, in dem Sie überprüfen können, welche Funktionen Ihr Browser unterstützt. WAAPI ist eine großartige Möglichkeit, Animationen auszuführen (muss in JavaScript ausgeführt werden), da sie zu einer nativen API gehört - was bedeutet, dass es ohne zusätzliche Bibliotheken funktioniert. Wenn Sie Waapi überhaupt nicht kennen, finden Sie hier eine sehr gute Einführung in die Einführung von Dan Wilson.

Flip ist eine der effektivsten Animationsmethoden. Flip benötigt einen JavaScript -Code zum Ausführen.

Schauen wir uns die Kreuzung mit WAAPI an, drehen und integrieren Sie sie in React. Aber wir beginnen zuerst ohne Reagieren und dann zu reagieren.

Flip und Waapi

Waapi erleichtert Flip -Animation!

Quick Review Flip Review: Die Kernidee besteht darin, das Element zuerst, in dem es enden soll. Wenden Sie als nächstes die Transformation an, um sie auf die Ausgangsposition zu verschieben. Dann diese Conversions abbrechen.

Die Animationsumwandlung ist sehr effizient, daher ist Flip sehr effizient. Vor WAAPI müssen wir den Stil des Elements direkt manipulieren, um die Konvertierung festzulegen und darauf zu warten, dass der nächste Frame ihn absagt/umkehrt:

 // vor Waapi umdrehen
El.Style.transform = `Translatey (200px)`;

RequestAnimationFrame (() => {
  El.Style.transform = '';
});
Nach dem Login kopieren

Viele Bibliotheken basieren auf diesem Ansatz. Damit gibt es jedoch mehrere Probleme:

  • Alles fühlte sich wie ein großer Hack an.
  • Die Umkehrung von Flip -Animationen ist äußerst schwierig. Obwohl die CSS -Konvertierung nach Löschung der Klasse "frei" umgekehrt ist, ist dies hier nicht der Fall. Das Starten eines neuen Flips, während die vorherige Animation ausgeführt wird, führt zu einem Fehler. Die Inversion erfordert, dass die Transformationsmatrix mit GetComputedStyles analysiert wird und die aktuelle Größe berechnet wird, bevor eine neue Animation eingerichtet wird.
  • Fortgeschrittene Animation ist fast unmöglich. Um beispielsweise zu verhindern, dass das Kind des skalierten Elternteils verzerrt wird, müssen wir bei jedem Rahmen auf den aktuellen skalierten Wert zugreifen. Dies kann nur durch Parsen der Transformationsmatrix erfolgen.
  • Im Browser gibt es viele Dinge zu achten. Zum Beispiel, manchmal um Flip -Animation in Firefox perfekt auszuführen, müssen Sie den RequestAnimationFrame zweimal anrufen:
 RequestAnimationFrame (() => {
  RequestAnimationFrame (() => {
    El.Style.transform = '';
  });
});
Nach dem Login kopieren

Wir stoßen bei der Verwendung von WAAPI nicht auf diese Probleme. Die umgekehrte Funktion kann leicht umgekehrt werden. Die umgekehrte Skalierung von Kindern ist ebenfalls möglich. Wenn Fehler auftreten, ist es leicht, den Schuldigen herauszufinden, da wir nur einfache Funktionen wie Animate und Reverse verwenden, anstatt verschiedene Dinge wie die RequestAnimationFrame -Methode durchzuwandeln.

Hier ist eine Zusammenfassung der WAAPI -Version:

 el.classList.toggle ('someclass');
const keyframes =/* Berechnen Sie Größe/Positionsdifferenz*/;
El.Animate (Keyframes, 2000);
Nach dem Login kopieren

Flip und reagieren

Um zu verstehen, wie Flip -Animationen in React funktionieren, ist es wichtig zu wissen, wie und vor allem, warum sie in reinem JavaScript arbeiten. Erinnern Sie sich an die Komposition der Flip -Animation:

Alle Inhalte mit einem lila Hintergrund müssen vor dem "Ziehung" -Stief des Renderings stattfinden. Andernfalls werden wir kurz sehen, wie der neue Stil kurz blitzt, was nicht gut ist. Bei React wird die Situation etwas komplizierter, da alle DOM -Updates von uns durchgeführt werden.

Die Magie der Flip -Animation ist, dass Elemente konvertiert werden, bevor der Browser die Möglichkeit hat, zu zeichnen. Woher wissen wir also, dass der Moment "Bevor zeichnet" in React?

Werfen wir einen Blick auf den useLayoutEffect -Haken. Wenn Sie wissen wollen, was es ist ... das ist es! Alles, was wir in diesem Rückruf übergeben, wird nach dem DOM -Update synchron geschehen, aber vor dem Zeichnen . Mit anderen Worten, dies ist ein großartiger Ort, um Flip einzurichten!

Lassen Sie uns etwas tun, das die Flip -Technologie sehr gut ist: animierte DOM -Positionen. Wenn wir animieren wollen, wie Elemente von einer Dom -Position zu einer anderen wechseln, kann CSS nichts tun. (Stellen Sie sich vor, Sie erledigen eine Aufgabe in der To-Do-Liste und verschieben Sie sie in die ausgefüllte Aufgabenliste, genau wie Sie im folgenden Beispiel auf das Projekt klicken würden.)

Schauen wir uns das einfachste Beispiel an. Wenn Sie im folgenden Beispiel auf einen der beiden Blöcke klicken, werden die Positionen ausgetauscht. Ohne Flip passiert es sofort.

Es gibt viel zu tun. Beachten Sie, wie alle Arbeiten im Lebenszyklus -Hakenrückruf erfolgen: useEffect und useLayoutEffect . Was es ein wenig verwirrend macht, ist, dass die Zeitleiste unserer Flip -Animation nicht aus dem Code selbst ersichtlich ist, wie es in zwei React -Renderings geschieht. Folgendes ist die Zusammensetzung der React Flip -Animation, um verschiedene Betriebssequenzen anzuzeigen:

Obwohl useEffect immer nach useLayoutEffect und nach dem Browser -Ziehen läuft, ist es wichtig, dass wir die Position und Größe der Elemente nach dem ersten Rendering zwischenspeichern. Wir haben keine Chance, dies im zweiten Render zu tun, da useLayoutEffect nach allen DOM -Updates ausgeführt wird. Dieser Prozess ist jedoch im Grunde genommen der gleiche wie die gewöhnliche Flip -Animation.

Dinge zu beachten

Wie die meisten Dinge gibt es einige Dinge zu berücksichtigen, wenn Flip in React verwendet wird.

Bleiben Sie innerhalb von 100 Millisekunden

Flip -Animation ist die Berechnung. Die Berechnung dauert Zeit, und Sie müssen einiges an Arbeit leisten, bevor Sie eine reibungslose Umwandlung von 60 fps anzeigen können. Wenn die Verzögerung unter 100 Millisekunden liegt, bemerken die Menschen die Verzögerung nicht. Stellen Sie also sicher, dass alles unter diesem Wert liegt. Die Registerkarte "Performance" in Devtools ist ein großartiger Ort, um diesen Inhalt zu überprüfen.

Unnötiges Rendering

Wir können useState nicht verwenden, um die Größe, Position und Animationsobjekte für Cache zu erhalten, da jeder setState zu unnötigem Rendering führt und die Anwendung verlangsamt. Im schlimmsten Fall kann es sogar zu Fehlern führen. Verwenden Sie stattdessen useRef und behandeln Sie es als ein Objekt, das geändert werden kann, ohne etwas zu rendern.

Layout zittern

Vermeiden Sie das wiederholte Auslösen des Browser -Layouts. Im Kontext der Flip -Animation bedeutet dies, dass Sie das Schleifen durch Elemente und das Lesen ihrer Standorte mit getBoundingClientRect vermeiden und sie dann sofort animate . Batch "lesen" und "schreiben" so weit wie möglich. Dies ermöglicht extrem reibungslose Animationen.

Animation abgesagt

Versuchen Sie, in der vorherigen Demo zufällig auf die Quadrate zu klicken, während sie sich bewegen, und klicken Sie erneut, nachdem sie angehalten werden. Sie werden den Fehler sehen. Im wirklichen Leben interagieren Benutzer mit Elementen, während sie sich bewegen. Es lohnt sich daher, sicherzustellen, dass sie reibungslos storniert, innehalten und aktualisiert werden.

Allerdings können nicht alle Animationen mithilfe von reverse umgekehrt werden. Manchmal möchten wir, dass sie anhalten und dann zu einer neuen Position wechseln (z. B. wenn die Liste der Elemente zufällig gestört wird). In diesem Fall brauchen wir:

  • Holen Sie sich die Größe/Position des bewegten Elements
  • Vervollständigen Sie die aktuelle Animation
  • Berechnen Sie neue Dimensionen und Positionsunterschiede
  • Starten Sie eine neue Animation

In React ist dies schwieriger als es scheint. Ich habe viel Zeit damit verschwendet, an diesem Problem zu arbeiten. Das aktuelle Animationsobjekt muss zwischengespeichert werden. Ein guter Weg ist es, eine Karte zu erstellen, um die Animation per ID zu erhalten. Dann müssen wir die Größe und Position des bewegten Elements bekommen. Es gibt zwei Möglichkeiten, dies zu tun:

  1. Verwenden von Funktionskomponenten: Schleifen Sie einfach jedes Animationselement im Körper der Funktion durch und zwischen der aktuellen Position.
  2. Verwenden von Klassenkomponenten: Verwendung von getSnapshotBeforeUpdate -Lebenszyklusmethoden.

Tatsächlich empfiehlt die offizielle Reaktionsdokumentation, getSnapshotBeforeUpdate zu verwenden, "da zwischen dem Lebenszyklus der Rendering -Phase (z. getSnapshotBeforeUpdate render ) und dem Lebenszyklus der Commit -Phase ( componentDidUpdate .

Kämpfe nicht gegen den Browser

Ich habe es schon einmal gesagt, aber vermeiden Sie es, den Browser zu konfrontieren und zu versuchen, die Dinge auf den Weg des Browsers geschehen zu lassen. Wenn wir Änderungen der einfachen Größen animieren müssen, sollten Sie überlegen, ob CSS ausreicht (z. B. transform: scale() ). Ich fand, dass Flip -Animation am besten geeignet ist, wo Browser wirklich nicht helfen können:

  • Animationsdom -Positionsänderung (wie oben beschrieben)
  • Gemeinsame Layoutanimation

Die zweite ist eine komplexere Version des ersten. Es gibt zwei DOM -Elemente, die als eines Ganzen wirken und seine Position ändern (und das andere wird deinstalliert/versteckt). Dieser Trick kann einige coole Animationen erreichen. Beispielsweise wird diese Animation mit einer Bibliothek hergestellt, die ich als React-Easy-Flip erstellt habe und diese Methode verwendet:

Bibliothek

Es gibt viele Bibliotheken, die Flip -Animationen in React und abstrakten Boilerplate -Code erleichtern können. Zu den derzeit aktiv gehaltenen Bibliotheken gehören: react-flip-toolkit und meine Bibliothek react-easy-flip .

Wenn Sie nichts schwereres, aber zu allgemeinerer Animation haben, sehen Sie sich framer-motion an. Es ermöglicht auch coole gemeinsame Layout -Animationen! Es gibt ein Video, das die Bibliothek eingehend untersucht.

Ressourcen und Referenzen

  • Josh W. Comeaus Animation-nicht animiert
  • Aufbau Hochleistungserweiterung und Faltanimationen von Paul Lewis und Stephen McGruer aufbauen
  • "Magische Bewegung im Inneren" von Matt Perry
  • @KeyFramers twittern "mit animierten CSS -Variablen aus JavaScript".
  • Mariko Kosakas "interne Liste der modernen Webbrowser (Teil 3)"
  • Alex Holacheks einfache Build -Komplex -UI -Animation in React
  • David Khourshids "Animation von Layouts mit Flip -Technologie"
  • Kirill Vasildsovs "fließende Animation mit React Hooks"
  • Jayant Bhawals "React -Hooks für gemeinsame Elemente verwenden"

Diese überarbeitete Ausgabe behält das Originalbildformat und die Platzierung bei gleichzeitiger Paraphrasierung des Textes, um eindeutige Inhalte zu erstellen. Es befasst sich auch mit kleinen grammatikalischen und stilistischen Problemen.

Das obige ist der detaillierte Inhalt vonAlles, was Sie über Flip -Animationen in React wissen müssen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Gestapelte Karten mit klebriger Positionierung und einem Schuss Sass Gestapelte Karten mit klebriger Positionierung und einem Schuss Sass Apr 03, 2025 am 10:30 AM

Neulich habe ich dieses besonders schöne Stück von der Website von Corey Ginnivan entdeckt, auf der eine Sammlung von Karten aufeinander stapelt.

Google -Schriftarten variable Schriftarten Google -Schriftarten variable Schriftarten Apr 09, 2025 am 10:42 AM

Ich sehe, dass Google -Schriftarten ein neues Design (Tweet) ausgelöst haben. Im Vergleich zur letzten großen Neugestaltung fühlt sich dies viel iterativer an. Ich kann den Unterschied kaum erkennen

So erstellen Sie einen animierten Countdown -Timer mit HTML, CSS und JavaScript So erstellen Sie einen animierten Countdown -Timer mit HTML, CSS und JavaScript Apr 11, 2025 am 11:29 AM

Haben Sie jemals einen Countdown -Timer für ein Projekt benötigt? Für so etwas ist es möglicherweise natürlich, nach einem Plugin zu greifen, aber es ist tatsächlich viel mehr

Warum werden die lila abgeschnittenen Bereiche im Flex -Layout fälschlicherweise als 'Überlaufraum' betrachtet? Warum werden die lila abgeschnittenen Bereiche im Flex -Layout fälschlicherweise als 'Überlaufraum' betrachtet? Apr 05, 2025 pm 05:51 PM

Fragen zu lila Schrägstrichen in Flex -Layouts Bei der Verwendung von Flex -Layouts können Sie auf einige verwirrende Phänomene stoßen, wie beispielsweise in den Entwicklerwerkzeugen (D ...

Wie wähle ich ein untergeordnetes Element mit dem erstklassigen Namen über CSS aus? Wie wähle ich ein untergeordnetes Element mit dem erstklassigen Namen über CSS aus? Apr 05, 2025 pm 11:24 PM

Wenn die Anzahl der Elemente nicht festgelegt ist, wählen Sie das erste untergeordnete Element des angegebenen Klassennamens über CSS aus. Bei der Verarbeitung der HTML -Struktur begegnen Sie häufig auf verschiedene Elemente ...

HTML -Datenattributehandbuch HTML -Datenattributehandbuch Apr 11, 2025 am 11:50 AM

Alles, was Sie schon immer über Datenattribute in HTML, CSS und JavaScript wissen wollten.

Ein Beweis für das Konzept, um Sass schneller zu machen Ein Beweis für das Konzept, um Sass schneller zu machen Apr 16, 2025 am 10:38 AM

Zu Beginn eines neuen Projekts erfolgt die SASS -Zusammenstellung im Blinzeln eines Auges. Dies fühlt sich gut an, besonders wenn es mit Browsersync kombiniert ist, das nachlädt

See all articles