Die Frage, die mir am häufigsten gestellt wird: Welches Animationswerkzeug empfehlen Sie?
Nachdem ich mit einer Reihe davon gearbeitet habe, kann ich Ihnen sagen: Es gibt keine richtige Antwort. Es ist eine komplizierte Frage und eine komplizierte Antwort. Dieser Beitrag soll klären, was wann verwendet werden soll, damit Sie mit dem richtigen Werkzeug für die jeweilige Aufgabe arbeiten können.
Wenn Sie hier für React sind, haben wir das abgedeckt! Springen Sie zum Abschnitt React und Animation unten, und wir werden aufschlüsseln, was und wie Sie es verwenden sollten.
Es ist unmöglich, jede einzelne Animationsbibliothek durchzugehen, daher werde ich mich auf die beschränken, die ich entweder verwendet habe oder die mich interessieren. Bitte beachten Sie, dass dies meine Empfehlungen sind, die auf meinen eigenen Erfahrungen basieren, und das Web hat viel Grauzone, sodass Sie möglicherweise andere Erfahrungen oder Meinungen haben. Das ist in Ordnung.
Native Animation
Bevor wir über Bibliotheken sprechen, lassen Sie uns einige native Animationsimplementierungen durchgehen. Die meisten Bibliotheken verwenden ohnehin native Animationstechnologien im Hintergrund. Je mehr Sie über diese wissen, desto besser können Sie verhandeln, was passiert, wenn sie abstrahiert werden.
CSS
CSS ist nach wie vor eine meiner liebsten Arten zu animieren. Ich benutze es seit Jahren und bin immer noch ein Fan wegen seiner Lesbarkeit und exzellenten Leistung. CSS-Animationen ermöglichen den Übergang zwischen verschiedenen Zuständen mithilfe eines Satzes von Keyframes.
Pro
- Sie benötigen keine externe Bibliothek.
- Die Leistung ist großartig, besonders wenn Sie Dinge tun, die von Natur aus hardwarebeschleunigt sind (auf die GPU ausgelagert). Hier ist ein Artikel über die Eigenschaften, die Ihnen dabei helfen.
- Präprozessoren (wie Sass oder Less) ermöglichen es Ihnen, Variablen (für Dinge wie Easing-Funktionen oder Timings) zu erstellen, die konsistent bleiben sollen, zusammen mit
:nth-child-Pseudoklassen in Funktionen, um Staggering-Effekte zu erzeugen. - Sie können über
onAnimationEndund einige andere Animations-Hooks mit nativem JavaScript lauschen. - Bewegung entlang eines Pfades ist auf dem Weg, was großartig sein wird.
- Es ist einfach für responsive Entwicklung zu verwenden, da Sie Ihre Animation mit Media Queries modifizieren können.
Contra
- Die Bezier-Kurven (Easing) können etwas einschränkend sein. Mit nur zwei Griffen, um die Bezier-Kurve zu formen, können Sie keine komplexen physikalischen Effekte erzeugen, die für realistische Bewegungen schön sind (aber nicht sehr oft notwendig sind).
- Wenn Sie mehr als drei Animationen hintereinander verketten, empfehle ich, zu JavaScript zu wechseln. Die Sequenzierung in CSS wird mit Verzögerungen komplex, und Sie müssen viel neu berechnen, wenn Sie das Timing anpassen. Sehen Sie sich diesen Pen von Val Head an, der veranschaulicht, was ich meine. Staggers sind auch einfacher zu schreiben in JavaScript. Sie können die oben erwähnten nativen JavaScript-Ereignisse nutzen, um dies zu umgehen, aber dann wechseln Sie den Kontext zwischen den Sprachen, was auch nicht ideal ist. Lange, komplexe, sequentielle Animationen sind einfacher in JavaScript zu schreiben und zu lesen.
- Die Unterstützung für Bewegung entlang eines Pfades ist noch nicht ganz da. Sie können die Unterstützung für Firefox hier wählen. Die Unterstützung für Safari zu wählen, soweit ich das beurteilen kann, ist etwas individueller. Ich habe mich registriert, um einen Fehlerbericht auszufüllen und habe die Bewegungsbahnmodul in CSS als Feature angefordert.
- CSS + SVG-Animation hat einige seltsame Verhaltensweisen. Ein Beispiel ist, dass in Safari-Browsern Opazität und Transformationen in Kombination fehlschlagen oder seltsame Effekte haben können. Ein weiteres ist, dass die Definition des Transformationsursprungs in der Spezifikation, wenn sie sequenziell angewendet wird, auf eine nicht intuitive Weise erscheinen kann. So ist die Spezifikation geschrieben. Hoffentlich hilft SVG 2 dabei, aber vorerst erfordert CSS und SVG auf Mobilgeräten manchmal seltsame Hacks, um es richtig zu machen.
requestAnimationFrame
requestAnimationFrame (rAF) ist eine native Methode, die auf dem window-Objekt in JavaScript verfügbar ist. Sie ist wirklich wunderbar, denn im Hintergrund ermittelt sie die geeignete Bildrate für Ihre Animation in der jeweiligen Umgebung und gibt sie nur auf dieser Ebene aus. Wenn Sie sich beispielsweise auf dem Mobilgerät befinden, wird nicht so eine hohe Bildrate verwendet wie auf dem Desktop. Sie stoppt auch, wenn ein Tab inaktiv ist, um unnötige Ressourcen zu vermeiden. Aus diesem Grund,
ist requestAnimationFrame eine sehr performante Möglichkeit zur Animation, und die meisten Bibliotheken, die wir behandeln werden, verwenden sie intern. requestAnimationFrame funktioniert ähnlich wie Rekursion: Bevor der nächste Frame einer Sequenz gezeichnet wird, wird die Logik ausgeführt und dann wieder aufgerufen, um fortzufahren. Das mag etwas komplex klingen, aber was es wirklich bedeutet, ist, dass Sie eine Reihe von Befehlen haben, die ständig ausgeführt werden, sodass Sie die Interpolation der Zwischenschritte sehr gut rendern können.
Canvas
Canvas ist großartig, um diese Pixel in Bewegung zu setzen! Viele der coolen Dinge, die Sie auf CodePen sehen, werden von Canvas-Magiern gemacht. Wie der Name schon sagt, bietet Canvas einen visuellen Raum für Skripting, in dem Sie komplexe Zeichnungen und Interaktionen erstellen können, alles mit leistungsstarkem Rendering. Wir arbeiten hier mit Pixeln, was bedeutet, dass sie Raster (im Gegensatz zu Vektoren) sind.
Pro
- Da wir nicht Dinge im DOM bewegen, sondern einen Pixelbrei, können Sie eine Menge komplexer Dinge tun, ohne die Leistung zu beeinträchtigen.
- Canvas ist wirklich gut für Interaktion. Sie sind bereits in JavaScript, was viel Kontrolle bietet, ohne den Kontext zu wechseln.
- Die Leistung ist sehr gut. Vor allem, wenn man bedenkt, was man damit machen kann.
- Der Himmel ist die Grenze dessen, was Sie erstellen möchten.
Contra
- Es ist schwierig, sie zugänglich zu machen. Sie müssten etwas wie React verwenden, um ein DOM für Sie zu erstellen, was Flipboard vor einiger Zeit geschafft hat, obwohl in ihrem Fallbeispiel es schien, als hätten sie noch mehr Arbeit zu tun. Dort gibt es wahrscheinlich eine Gelegenheit, wenn Sie daran interessiert sind, diese Aufgabe zu übernehmen.
- Ich finde es ziemlich unintuitiv, es responsiv zu machen. Damit meine ich nicht, eine kleine Version auf dem Handy zum Laufen zu bringen, denn das tut es gut. Ich meine, Inhalte basierend auf dem Viewport zu verschieben, zu verlagern und neu zu organisieren. Ich bin sicher, es gibt einige wirklich großartige Entwickler da draußen, die das einfach machen, aber ich würde sagen, es ist nicht gerade einfach.
- Es ist nicht Retina-ready. Im Gegensatz zur SVG-Animation, die auflösungsunabhängig ist, sind die meisten Canvas-Animationen, die ich sehe, auf Retina-Displays nicht scharf.
- Es kann schwierig sein, zu debuggen. Wenn das, was Sie bauen, fehlschlägt, schlägt es fehl, indem es nichts anzeigt, im Gegensatz zur Animation im DOM, wo die Dinge noch da sind, aber seltsam funktionieren.
SMIL
SMIL ist die native SVG-Animationsspezifikation. Sie ermöglicht es Ihnen, SVGs direkt innerhalb des SVG-DOMs zu bewegen, zu formen und sogar damit zu interagieren. Es gibt eine Menge Vor- und Nachteile bei der Arbeit mit SMIL, aber der größte Nachteil führt dazu, dass ich es ganz weglasse: Es verliert an Unterstützung. Hier ist ein Beitrag, den ich darüber geschrieben habe, wie man zu besser unterstützten Techniken wechselt.
Web Animations API
Die Web Animations API ist natives JavaScript, mit dem Sie komplexere sequentielle Animationen erstellen können, ohne externe Skripte zu laden. Oder es wird, sobald die Unterstützung wächst. Vorerst benötigen Sie wahrscheinlich ein Polyfill. Diese native API wurde als Rückgrat für all die großartigen Bibliotheken und Arbeiten entwickelt, die Menschen bereits mit JavaScript im Web erstellt haben. Dies ist Teil einer Bewegung, die Leistung von CSS-Animationen und die Flexibilität der Sequenzierung in JavaScript unter einem Dach zu vereinen. Wenn Sie mehr darüber erfahren möchten, gibt es eine ShopTalk-Episode ganz dazu.
Pro
- Die Sequenzierung ist einfach und sehr gut lesbar. Schauen Sie sich dieses Beispiel von Dan Wilson an, das CSS-Keyframes und die Web-Animations-API vergleicht.
- Die Leistung scheint auf gutem Weg zu sein. Ich habe das noch nicht selbst gut getestet, plane es aber. (Sie können und sollten auch eigene Leistungstests durchführen).
Contra
- Die Unterstützung ist derzeit nicht gut. Sie ändert sich auch noch etwas, daher wäre ich, solange sich die Spezifikation noch bewegt, vorsichtig, sie in einer Produktionsumgebung einzusetzen.
- Es gibt immer noch viele Dinge bei der Timeline von GSAP (die wir gleich behandeln werden), die leistungsfähiger sind. Die wichtigen für mich sind die Cross-Browser-Stabilität für SVG und die Möglichkeit, große Sequenzen in einer Codezeile zu animieren.
WebGL
Mit WebGL können Sie außergewöhnliche Dinge tun. Wenn etwas Sie umhaut, ist die Wahrscheinlichkeit groß, dass es mit WebGL gemacht wurde. Es ist wirklich gut für interaktive und 3D-Effekte. Sehen Sie sich einige dieser Demos an. Technisch gesehen verwendet es Canvas, aber ich mag es, die Unterscheidung zu treffen, weil, ich weiß nicht, Namen cool sind, wenn sie dazu dienen, geringfügige Unterschiede zu identifizieren.
Pro
- Erstaunliche visuelle Effekte
- Drei Dimensionen bedeuten eine ganz neue Welt der Interaktion
- Hardwarebeschleunigt
- Möglichkeiten für VR
Contra
- Schwieriger zu lernen als die anderen nativen Animationen, die wir bisher behandelt haben. Die ersten beiden Animationen, die ich gemacht habe, dachte ich, funktionierten nicht, weil ich die Kamera falsch ausgerichtet hatte (womp womp). Es gibt auch weniger wirklich gute Artikel und Bücher, die erklären, wie man damit arbeitet, als die anderen Technologien, die ich bisher erwähnt habe, aber sie wachsen.
- Schwierig, responsiv zu machen. Die meisten Webseiten, die ich gesehen habe und die WebGL verwenden, fallen auf einen Bildschirm mit der Meldung "Bitte betrachten Sie diese Seite auf dem Desktop".
Externe Bibliotheken
GreenSock (GSAP)
GreenSock ist bei weitem meine Lieblingsbibliothek zum Arbeiten. Bitte verstehen Sie, dass diese Voreingenommenheit aus der Arbeit, dem Spielen und dem krachenden Anstoßen an vielen verschiedenen Animationswerkzeugen herrührt. Wenn ich meine starke Befürwortung gebe, dann durch Blut, Schweiß und Tränen. Ich mag es besonders für SVG. Die GreenSock Animation API hat fast zu viele coole Vorteile, um sie hier aufzulisten, ohne etwas zu verpassen, aber sie haben sowohl Dokumentationen als auch Foren, die Sie erkunden können.
Pro
- Sie ist außerordentlich performant für etwas, das nicht nativ ist. Das heißt, sie performs genauso gut, was ein großer wichtiger Punkt ist.
- Die Sequenzierungswerkzeuge (wie Timeline) sind so einfach zu lesen wie zu schreiben. Es ist sehr einfach, das Timing anzupassen, mehrere Dinge gleichzeitig mit relativen Labels auszuführen und sogar Animationen mit einer Codezeile zu beschleunigen oder zu verlangsamen.
- Sie haben viele weitere Plugins, wenn Sie ausgefallene Dinge tun möchten, wie Text animieren, SVGs morphen oder Pfade zeichnen.
- Ihre Bewegung entlang eines Pfades im bezier-Plugin hat die längste Unterstützung.
- Es löst die SVG-Cross-Browser-Probleme. Gott sei Dank dafür. Besonders für Mobilgeräte. Es gibt einige gute Informationen dazu in diesem Beitrag, den sie geschrieben haben.
- Sie bieten wirklich schöne, sehr realistische Eases.
- Da Sie jede beliebige Ganzzahl verzerren können, können Sie coole Dinge tun, wie SVG-Filter für einige tolle Effekte animieren, und es funktioniert sogar in Canvas. Der Himmel ist die Grenze dessen, was Sie animieren können.
- GSAP ist die einzige Animationsbibliothek, einschließlich des nativen SMIL, mit der Sie Pfad-Daten mit einer ungeraden Anzahl von Punkten morphen können. Dies hat neue Möglichkeiten für Bewegung und Fluss eröffnet. (Wenn Sie es in Aktion sehen möchten, gehen Sie zum Logo oben auf dieser Seite auf dem Desktop und klicken Sie auf den orangen Teil im Strich.)
Contra
- Sie müssen Lizenzgebühren zahlen, wenn Sie Ihr Produkt an mehrere Benutzer (Apps und kostenpflichtige Websites) weiterverkaufen. Das sind wahrscheinlich nicht die meisten Fälle. Ich werde auch hinzufügen, dass die Unterstützung der Arbeit daran nicht das Schlimmste auf der Welt ist.
- Wie bei jeder externen Bibliothek müssen Sie darauf achten, welche Versionen Sie in der Produktion verwenden. Wenn neue Versionen herauskommen, erfordert ein Upgrade einige Tests (wie bei jeder Bibliothek). Sie müssen auch die Größe der Bibliothek berücksichtigen.
VelocityJS
VelocityJS bietet viel von der Sequenzierung, die GreenSock bietet, aber ohne viele der zusätzlichen Funktionen. Ich benutze Velocity wegen der folgenden Nachteile nicht mehr wirklich. Die Syntax von Velocity ähnelt ein wenig jQuery, sodass sie Ihnen vertraut sein wird, wenn Sie bereits jQuery verwenden.
Pro
- Das Verketten vieler Animationen ist viel einfacher als mit CSS.
- Für Verfeinerungen bei Easing gibt es Step-Easing, bei denen Sie ein Array übergeben können.
- Die Dokumentation ist ziemlich gut, sodass es einfach ist, zu lernen und loszulegen.
Contra
- Die Leistung ist nicht großartig. Trotz einiger gegenteiliger Behauptungen fand ich, als ich eigene Tests durchgeführt habe, dass es nicht wirklich mithalten konnte. Ich empfehle Ihnen jedoch, Ihre eigenen Tests durchzuführen, da das Web sich ständig weiterentwickelt und dieser Beitrag zeitlich eingefroren ist.
- GSAP bietet mehr Leistung und Cross-Browser-Stabilität ohne zusätzlichen Ballast. Ich würde auch sagen, dass jQuery früher Leistungstests verloren hat, aber das könnte sich seit ihrer RAF-Adaption geändert haben, sodass Velocity keineswegs schlecht ist, aber im Vergleich verliert.
- Soweit ich das beurteilen kann, wird es nicht mehr aktiv gepflegt. Ich habe gehört, dass Julian Shapiro das Projekt an jemand anderen übergeben hat, sodass es vielleicht irgendwann in der Zukunft wieder aufleben wird.
jQuery
jQuery ist nicht ausschließlich eine Animationsbibliothek, aber es hat Animationsmethoden und viele Leute benutzen es, also dachte ich, ich würde es erwähnen.
Pro
- Viele Websites haben es bereits geladen, sodass es normalerweise sofort verfügbar ist.
- Die Syntax ist wirklich einfach zu lesen und zu schreiben.
- Sie sind kürzlich zu
requestAnimationFrameumgestiegen, sodass in Versionen 3.0.0 und neuer die Leistung besser sein wird als zuvor.
Contra
- Versionen vor 3.0.0 sind leistungsschwach und nicht zu empfehlen. Ich habe dies nicht sehr formell getestet, aber abgesehen von der Betrachtung von Repaints und Painting in Chrome DevTools, können Sie es auch mit Ihren Augen sehen.
- Animationen werden in keiner Version für SVG unterstützt.
- jQuery ist auf das DOM beschränkt, im Gegensatz zu Werkzeugen wie GSAP, die auf allem funktionieren.
Snap.svg
Viele Leute denken, Snap sei eine Animationsbibliothek, aber es war nie als solche gedacht. Ich wollte Leistungstests für Snap durchführen, aber selbst Dmitri Baranovskiy (der unglaublich kluge und talentierte Autor von Snap.svg und seinem Vorgänger Rafael) sagt hier im SVG Immersion Podcast, dass es nicht das richtige Werkzeug dafür sei, und sagte in einer Nachricht an mich:
Nur eine Anmerkung: Snap ist keine Animationsbibliothek und ich empfehle immer, sie mit GSAP zu verwenden, wenn Sie eine ernsthafte Animation benötigen.
Das gesagt, jQuery ist nicht gut mit SVG, obwohl sie jetzt Klassenoperationen unterstützen. Wenn ich DOM-Manipulationen mit SVG durchführen muss, ist Snap dafür wirklich großartig.
Eine Bibliothek namens SnapFoo wurde kürzlich veröffentlicht und erweitert das Reich von Snap auf Animationen. Ich habe sie selbst noch nicht ausprobiert, aber sie sieht ziemlich cool aus und ist einen Versuch wert. Wenn Sie sie ausprobieren, berichten Sie zurück oder kommentieren Sie unten!
Mo.js
Das ist eine Bibliothek von einem großartigen Kerl namens LegoMushroom. Er ist ein äußerst talentierter Animator und hat bereits einige tolle Demos für diese Bibliothek erstellt, die mich wirklich begeistert haben. Diese Bibliothek ist noch in der Beta-Phase, wird aber bald veröffentlicht. Ich habe einen Einführungsleitfaden zum Arbeiten damit hier geschrieben, wenn Sie mehr erfahren möchten.
Pro
- Es gibt Dinge wie Formen, Ausbrüche und Wirbel, mit denen sich sehr einfach arbeiten lässt
und die für Sie eingerichtet werden – Sie müssen also nicht der weltbeste oder kreativste Illustrator sein, um etwas Schönes zu schaffen. - Mo.js bietet einige der besten und schönsten Werkzeuge im Web, darunter
Player, Timelines und benutzerdefinierte Pfadersteller. Allein das ist einer der überzeugendsten Gründe für die Verwendung - Es gibt ein paar verschiedene Möglichkeiten zu animieren – eine ist ein Objekt, eine andere ist das Zeichnen einer
Änderung über den Verlauf einer Ease – so können Sie entscheiden, welcher Weg Ihnen angenehmer ist.
Contra
- Es bietet noch nicht die Möglichkeit, ein SVG als Elternteil für benutzerdefinierte Formen zu verwenden (ich
glaube, LegoMushroom arbeitet daran), daher ist die Arbeit mit Koordinatensystemen und Skalierung für Responsive weniger intuitiv und schwieriger auf Mobilgeräten zu handhaben. Dies ist jedoch eine ziemlich fortgeschrittene Technik, die Sie möglicherweise nicht benötigen. - Es korrigiert noch kein Cross-Browser-Verhalten wie GreenSock, was bedeutet,
dass Sie möglicherweise Hacks schreiben müssen, wie Sie es mit CSS tun. Er erwähnte, dass er auch daran arbeitet.
Three.js
Three.js ist ein wunderschönes 3D-Animationswerkzeug! Sehen Sie sich einige dieser Beispiele an. Ich habe nicht viel damit gearbeitet, daher fühle ich mich nicht wohl, darüber zu berichten, aber ich habe vor, das zu tun, und werde den Beitrag aktualisieren, wenn ich mehr weiß. Die Leute sprechen normalerweise über dieses und das native WebGL im Tandem.
Bodymovin’
Bodymovin’ wurde für die Erstellung von Animationen in Adobe After Effects entwickelt, die Sie einfach exportieren können, um sie als SVG und JavaScript zu verwenden. Einige der Demos sind wirklich beeindruckend. Ich arbeite nicht damit, weil ich es wirklich mag, Dinge von Grund auf mit Code zu erstellen (daher widerspricht dies für mich dem Zweck), aber wenn Sie eher ein Designer als ein Entwickler sind, wäre dieses Werkzeug wahrscheinlich großartig für Sie. Der einzige Nachteil dabei ist, dass Sie es neu exportieren müssten, wenn Sie es später ändern müssen. Das könnte ein seltsamer Workflow sein. Außerdem ist der ausgegebene Code normalerweise ziemlich hässlich, aber ich habe nicht gesehen, dass dies die Leistung von Bodymovin' zu sehr beeinträchtigt hat, also ist es wahrscheinlich in Ordnung.
React-spezifische Workflows
Bevor wir über React sprechen, klären wir, warum wir Animationen in React überhaupt anders behandeln müssen. DOM steht für Document Object Model. Es ist, wie wir ein strukturiertes Dokument mit Objekten erstellen, deren Knoten wir als Baum bezeichnen. React interagiert mit einem virtuellen DOM, das sich von der nativen Browser-DOM-Implementierung unterscheidet, es ist eine Abstraktion.
React verwendet aus verschiedenen Gründen ein virtuelles DOM, von denen das überzeugendste die Fähigkeit ist, zu erkennen, was sich geändert hat und nur die Teile zu aktualisieren, die es benötigt. Diese Abstraktion hat ihren Preis, und einige der alten Tricks, mit denen Sie gearbeitet haben, werden Ihnen in einer React-Umgebung Schwierigkeiten bereiten. jQuery zum Beispiel spielt nicht gut mit React zusammen, da seine Hauptfunktion darin besteht, mit dem nativen DOM des Browsers zu interagieren und ihn zu manipulieren. Ich habe sogar einige seltsame CSS-Race-Conditions gesehen. Hier sind einige meiner Empfehlungen für schöne Animationen in einem React-Workflow.
React-Motion
React-Motion ist eine sehr beliebte Methode, um in React zu animieren, und die Community hat sie gegenüber der alten ReactCSSTransitionGroup übernommen, die früher am häufigsten verwendet wurde. Ich mag sie sehr, aber es gibt einige wichtige Punkte bei der Arbeit damit, die, wenn Sie sie nicht verstehen, dazu führen werden, dass Sie sich den Kopf zerbrechen.
React-Motion ähnelt stark game-basierten Animationen, bei denen Sie einem Element Masse und Physik geben und es auf seinen Weg schicken, und es kommt an, wenn es ankommt. Das bedeutet, dass Sie keine Zeit angeben, wie Sie es mit CSS oder einer anderen traditionellen webbasierten sequenziellen Animation tun. Dies ist eine ganz andere Art, über Animationen nachzudenken. Das kann bedeuten, dass die Bewegung die Fähigkeit hat, wirklich realistisch auszusehen, was sehr schön sein kann. Aber UIs haben andere Anforderungen als Spiele, daher kann die Arbeit damit knifflig werden. Nehmen wir an, Sie haben zwei Dinge, die unabhängig voneinander ausgeführt werden und gleichzeitig ankommen müssen, die aber unterschiedlich sind. Es kann schwierig sein, sie genau aufeinander abzustimmen.
Bis vor kurzem gab es keine Sequenzierung. Erst letzte Woche hat Cheng Lou onRest hinzugefügt, was diese Art von Callback-Workflow ermöglicht. Es ist immer noch nicht einfach, eine Schleife zu schreiben, ohne eine Endlosschleife zu schreiben (schlecht). Sie brauchen das vielleicht nicht, aber ich wollte es erwähnen. Zur Information für performance-sensible Benutzer: Es verwendet Neu-Rendering.
Pro
- Die Animation kann sehr schön und realistisch aussehen, und die Federoptionen sind gut.
- Der Staggering-Effekt ist ziemlich gut. Er ist auch in den meisten JS-Bibliotheken verfügbar, aber dieser hier wird basierend auf der letzten Bewegung erstellt, nicht durch Duplizieren der letzten, sodass es einige schöne Bewegungsmöglichkeiten gibt.
- Die Ergänzung von
onRestist eine große Sache. Sie ermöglicht eine gewisse Sequenzierung, die vorher nicht verfügbar war. Wenn Sie sich also die Demos ansehen, sehen Sie noch nicht einmal alles, was sie zu bieten hat. - Ich würde dies derzeit als das Animationswerkzeug betrachten, das am besten mit React zusammenspielt.
Contra
- Es ist nicht so plug-and-play wie einige andere Bibliotheken oder native, was bedeutet, dass Sie ziemlich viel Code schreiben. Manche Leute mögen das, manche nicht. Es ist auf diese Weise nicht anfängerfreundlich.
- Die Sequenzierung ist aufgrund der komplexen Natur des Codes nicht so einfach oder lesbar wie bei einigen Alternativen.
onRestfunktioniert noch nicht für Staggering-Parameter.
GSAP in React
GreenSock hat so viel zu bieten, dass es sich immer noch lohnt, es in einer React-Umgebung zu verwenden. Dies gilt insbesondere für komplexere Sequenzierungen, bei denen React-Motion keine schlanke Lösung bietet und GreenSock glänzt. Es erfordert etwas mehr Finesse als üblich, und einige Dinge, die mit dem DOM funktionieren sollten und auch funktionieren, funktionieren in React nicht. Trotzdem habe ich React und GSAP schon auf verschiedene Arten zum Laufen gebracht, also hier ist, wie ich es mache.
- Greifen Sie auf die nativen Lifecycle-Methoden der React-Komponenten zu.
So mache ich das. Wenn ich möchte, dass es sofort ausgelöst wird, verwende ichcomponentDidMount. - Erstellen Sie eine Funktion, die eine Timeline hat, und rufen Sie diese Funktion dann innerhalb von etwas auf, das Sie für Interaktionen verwenden. Ich kann einen Inline-Event-Handler wie
onClick()haben, und innerhalb der benutzerdefinierten Funktion dafür rufe ich eine andere Funktion auf, die eine Timeline darin enthält. In einem jQuery- oder Vanilla-JS-Setup würde ich die Timeline zunächst pausieren und auf Wiedergabe klicken, aber das muss ich hier nicht tun. - Hier ist ein guter Beitrag, den Chang Wang über die Verknüpfung mit
ReactTransitionGroup()geschrieben hat, was eine ziemlich coole Methode ist. - Sie können eine Bibliothek wie React-Gsap-Enhancer verwenden. Ich habe diese nicht viel selbst verwendet, aber es gibt wirklich süße Demos. Eine davon ist ein Fork von einer meiner eigenen Demos, und ich muss sagen, als ich den Code betrachtete, schien er viel wortreicher zu sein als das, was ich geschrieben habe. Ich bin mir nicht sicher, ob das auf die Bibliothek, React selbst oder ihren Stil zurückzuführen ist.
CSS in React
CSS-Animationen haben in letzter Zeit eine kleine Renaissance erlebt, wahrscheinlich weil es der einfachste Weg für Animationen in React ist. Ich arbeite gerne mit ihnen für kleine Dinge wie UI/UX-Interaktionen. Ich habe gesehen, wie sie sich etwas seltsam verhalten, wenn Sie versuchen, Dinge mit Verzögerungen zu verketten. Ansonsten sind sie ziemlich großartig, besonders für kleine UI-Anpassungen. In Bezug auf reale Animationen im Web ist CSS manchmal Ockhams Rasiermesser.
Fazit
Dies ist ein Meinungsbeitrag von jemandem, der ständig mit Animationen arbeitet, und dies ist, was ich durch pure rohe Gewalt der Arbeit mit diesen Technologien gesammelt habe. Meine Meinungen werden möglicherweise nicht von allen geteilt, und das ist in Ordnung. Ich habe keinen besonderen Grund, an einer Technologie treu zu sein, außer als Entwickler, unter Berücksichtigung ihrer Vielseitigkeit, Leistung und Benutzerfreundlichkeit. Hoffentlich kann diese Information Ihnen einige Zeit sparen.
Das ist, wie mein Gehirn verarbeitet, warum Animation in React seltsam ist
Ich denke also, das Beste, was Sie tun können, ist entweder...
Ich bin ein bisschen ein React-Neuling, aber das passt perfekt zu meinem Denken. Einige der Komponenten-Lifecycle-Funktionen, insbesondere shouldComponentUpdate(), sollten eine Methode für Option Nr. 3 bieten.
Offensichtlich hängt es vom Anwendungsfall ab, aber wäre eine Option nicht die Verwendung von Canvas innerhalb von React? Canvas ist nur ein einzelner Knoten, daher würde jede Zeichnung, die Sie erstellen, Reacts Update-Zyklus nicht beeinträchtigen, richtig?
Sehr guter Punkt, Casey. Ich habe React + Canvas im Canvas-Abschnitt kurz erwähnt, aber es ist eine Erwähnung wert. Ich werde den Beitrag in Kürze aktualisieren.
Die einzigen Probleme, die ich beim Animieren habe, sind mit neu erstelltem DOM verbunden – aber das war schon immer seltsam mit normalem altem JS. Wie Sarah erwähnt hat, gibt es Werkzeuge, die das lösen.
Was das DOM betrifft, das bereits existiert, wenn die Animation stattfinden soll, wie z. B. ein ausklappbares Menü oder etwas Ähnliches (wieder, vorausgesetzt, das Menü ist bereits da) – man kann einfach die alten Klassenzustandstechniken verwenden. D.h.: Das plötzliche Vorhandensein eines Klassennamens löst einen CSS-Selektor aus, der animiert wird.
„React könnte beschließen, diesen Knoten herauszureißen und neu zu rendern.“
Reacts Abgleichalgorithmus ist wirklich gut, und er wird normalerweise nur die minimale Anzahl von Änderungen am echten DOM vornehmen, die erforderlich sind, um die Dinge, die Sie aus Ihrer Render-Funktion zurückgeben, genau widerzuspiegeln. Es ist also nicht ganz so unvorhersehbar, wie Sie es klingen lassen. Wenn Sie Probleme mit React haben, das Knoten mitten in einer Animation neu rendert, fehlt Ihnen wahrscheinlich ein
keybei einem Ihrer Knoten. Das hilft React, Dinge intelligenter abzugleichen.Toller Artikel! Fasst sich im Wesentlichen zusammen: CSS für einfache Dinge, Greensock zum Verketten von Animationen und ein Framework basierend auf WebGL für 3D. :)
SMIL ist der einzig wahre Weg, SVG-Animationen zu erstellen. Alles andere ist nur ein Hack. Ich benutze es seit 10 Jahren und es funktioniert wie am Schnürchen. Sie können Ihre Animation in einer App erstellen und sie im Browser oder auf einem Mobiltelefon abspielen, und sie wird sich gleich verhalten. Keine Skripte oder CSS-Hacks erforderlich. Das gilt kaum für alle anderen Methoden, die meist mühsam zu portieren und zu warten sind. SMIL ist solide wie ein Fels und es gibt Polyfills für jeden Browser, sodass selbst wenn eines Tages jemand die SMIL-Unterstützung einstellt (Chrome hat die Absicht angekündigt, sie einzustellen, aber noch nicht getan, da die Nutzung von SMIL wächst, besonders auf Mobilgeräten. Selbst sehr beliebte Apps wie Viber erstellen ihre animierten Sticker mit SMIL unter Android).
Die Verwendung eines Polyfills für SMIL unterscheidet sich nicht von der Verwendung einer JavaScript-Bibliothek. Warum haben Sie also GSAP aufgenommen, aber nicht SMIL? Ich bevorzuge sicherlich etwas Standardisiertes, etwas, das ich aus einem beliebten Animationswerkzeug wie Adobe Animate CC exportieren kann (mit seinem Plugin „flash2svg“ können Sie jede von Ihnen erstellte Animation in einer einzigen SVG-Datei mit SMIL animiert exportieren, ohne Code oder CSS). Und die Open-Source-Version von Toonz, der leistungsstarken Animationssoftware, die von Ghibli-Studios verwendet wird, hat in ihrer Entwicklungs-Roadmap die Option, Animationen in SVG SMIL zu exportieren. SMIL wird weiterleben, entweder als nativer Standard oder als externe Bibliothek wie GSAP, aber es wird für immer bleiben.
Ich habe das Gefühl, Sie sind zu optimistisch bezüglich der Zukunft von SMIL.
Chrome-Entwickler haben gute Arbeit bei der Web Animations API geleistet, und auf dieser Grundlage sind sie bestrebt, SMIL einzustellen, um ihre Codebasis erheblich zu erleichtern. Und das werden sie tun, seien Sie sicher.
Microsoft wird keine SMIL-Unterstützung entwickeln, weil diese neue Richtung eingeschlagen wird. Sie sollten es wissen, da Sie auch dazu kommentiert haben: https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6509024-svg-animation-elements
Kurz gesagt, SMIL ist im Grunde tot.
@MaxArt: Vielleicht haben Sie meinen Punkt verpasst. SMIL wird nicht verschwinden, nur weil ein Browserhersteller es entscheidet. Im schlimmsten Fall wäre die Verwendung einer Animationsbibliothek erforderlich, genau wie bei den anderen hier besprochenen.
Es gibt bereits drei beliebte JavaScript-Bibliotheken für die Ausführung von SMIL-Animationen in Browsern, die sie nicht nativ unterstützen: Eric Willigers Polyfill, SIE und Fakesmile. Wenn Sie eine JavaScript-Bibliothek für Ihre Animationen verwenden möchten, ist die Verwendung einer SMIL-Bibliothek die beste Wahl, die Sie treffen können. Unabhängig von der nativen Unterstützung oder nicht, ist SMIL das Beste für SVG-Animationen. Und Sie können SMIL-Animationen in echten Animationswerkzeugen erstellen und Ihre animierten SVG-Assets mit jedem Grafikdesigner austauschen, da sie in einem Standardformat codiert sind, nicht in benutzerdefiniertem JavaScript-Code geschrieben. Glauben Sie mir: SMIL wird nicht verschwinden. Zumindest bis ein neues Standardformat für Vektoranimationen herauskommt.
Und tatsächlich gibt es einen neuen Standard: Er heißt Web Animation. In der Zwischenzeit ist SMIL tot, zusammen mit seiner umständlichen und sperrigen deklarativen Syntax. Wir haben bereits eine deklarative Möglichkeit, Animationen zu definieren, und das ist CSS. Komplexere und dynamischere Animationen sind für jede deklarative Sprache einfach nicht gut geeignet. Alles wird zu einem riesigen Haufen von immer obskureren Zeilen, die fast unmöglich zu warten sind.
SMIL bietet keinerlei Leistungsvorteile gegenüber CSS oder Web Animation, daher wird niemand ein Polyfill für etwas verwenden, das kein Browser früher oder später mehr unterstützen wird. Es ergibt einfach keinen Sinn.
Professionelle Animationen im Web werden sowieso meistens mit GSAP erstellt, das großartige Leistung und eine schöne und tatsächlich nutzbare API hat. Für andere Anwendungsfälle kümmern sich Designer einfach nicht darum, was hinter den Kulissen ihrer Vektoranimationen passiert, da sie Werkzeuge verwenden, die sich darum kümmern.
@MaxArt: Ich liebe die GSAP-Typen, und als ich vor vielen Jahren Actionscript benutzte, waren ihre Bibliotheken eine große Hilfe. Aber ich spreche hier nicht von Programmierung. Ich spreche von Animationen, die von Künstlern mit ihren Stiften und Tablets in Software wie OpenToonz oder Animate CC, oder CACANi oder Anime Studio, oder anderen erstellt werden. Künstler benutzen diese Apps, um Vektoranimationen zu erstellen, sie benutzen kein JavaScript. Wie werden also diese Vektoranimationen im Web angezeigt und reproduziert? In welchem Format können Sie sie exportieren? Es muss ein beschreibendes Grafikanimationsformat sein, wie SVG und SMIL. Ein von der W3C festgelegter Standard, den jeder nutzen kann, kein proprietäres Format, das ein Unternehmen nutzen kann, um Leute einzusperren und sie zu zwingen, ihre Bibliotheken oder ihre Werkzeuge zu verwenden. SMIL ist FREIHEIT. Es ist etwas, das Vektoranimationsdateien nutzbar, austauschbar und für jeden verständlich macht. SMIL ist das PNG der Vektoranimationen. Erinnern Sie sich, wie PNG geboren wurde? Ich tue es. Die Motivation für die Erstellung des PNG-Formats war, als Anfang 1995 bekannt wurde, dass der Lempel–Ziv–Welch (LZW)-Datenkompressionsalgorithmus, der im Graphics Interchange Format (GIF) verwendet wird, von Unisys patentiert wurde. GIF verwendete proprietäre Technologie. PNG war KOSTENLOS. Heute haben wir nur EIN offenes Standardformat für Vektoranimationen, SMIL. Eine Animation in „GSAP“-abhängigen Code zu exportieren? Eine proprietäre Bibliothek, die sich jederzeit ändern und Entwickler und Künstler für immer sperren kann? Oder sogar Kompatibilitätsprobleme zu verursachen, die alle Vektoranimationen plötzlich „veraltet“ und „nicht abspielbar“ macht, nur weil das Unternehmen beschließt, ein Upgrade für Benutzer zu erzwingen, um mehr Geld zu verdienen? Oder sogar Spezifikationen zu diktieren? Nein danke. Wenn Sie die Bedeutung der Verwendung eines offenen Standards nicht verstehen, sollten Sie die Geschichte des Webs und der gesamten Informationstechnologie studieren. Denn proprietäre Formate für Daten erweisen sich immer als schlecht und schädigen das gesamte Ökosystem, einschließlich des Eigentümers des Formats. Schauen Sie sich nur das Scheitern von Silverlight/XAML an. Oder Flash. Sie waren proprietär, und dann wurden sie zu geschlossenen Gärten. Und geschlossene Gärten trocknen am Ende immer aus. Je mehr sie darum kämpfen, geschlossen zu bleiben, desto mehr isoliert ihre Mauern sie von der Welt, bis sie niemand mehr benutzt. Deshalb speichere ich alle meine Vektoranimationsdateien im SVG-SMIL-Format. Software ändert sich, Browser und Bibliotheken ändern sich, aber eine .SVG-Datei wird immer dieselbe sein, weil sie ein Standard ist, wie PNG. Deshalb wird SMIL letztendlich gewinnen. Es würde auch gewinnen, wenn es nicht von Browsern, sondern nur von JavaScript-Bibliotheken wie SIE oder Fakesmile unterstützt würde. Weil es ein Standard ist. Und als Standard kann man nicht nur eine Bibliothek wie GSAP haben, sondern TAUSENDE unabhängige JavaScript-Bibliotheken, um sie abzuspielen. Sie können sie aus AnimateCC oder OpenToonz speichern und in einer mobilen App, die Sie entwickeln, wie Viber, oder auf einer Webseite, oder in einem Videospiel für eine Konsole mit Unity SVG Importer reproduzieren. Wie Sie sehen, gibt es einen klaren Vorteil darin, den Code vom Datensatz zu trennen. Und leider ist SVG das einzige Datenformat für Animationen, das Sie speichern können. GSAP oder jede andere Bibliothek ist Code, und sie sind von der Plattform und der spezifischen Softwareversion, wie dem Browser, abhängig. Ein Datenformat für Animationen hingegen ist universell. Eine klare Trennung von Code und Daten ist mit GSAP oder anderen in JavaScript geschriebenen Animationsbibliotheken unmöglich. Schließlich zeichnen Künstler Animationen nicht im Code. Sie zeichnen sie mit einem Stift und einem Grafiktablett. SVG SMIL ist das einzige echte Datenformat, in dem sie speichern können. Und das wird sich nicht ändern, nur weil irgendein blinder Manager bei Google beschließt, SMIL in Chrome abzuschaffen, um etwas Geld zu sparen.
@Emanuele, Sie machen viele gültige Punkte. Ich verstehe die Angst, etwas zu verwenden, das keinen offiziellen Standardkörper hat, der es unterstützt. Bitte bedenken Sie jedoch, dass
1) Bibliotheken wie GSAP sind in standardbasierten Technologien (JS) geschrieben, sodass es nicht so ist, als ob GSAP-basierte Animationen in 5 Jahren plötzlich nicht mehr funktionieren würden. Jeder Vanilla-JS-Code, den Sie selbst schreiben, birgt das gleiche Risiko, ebenso wie die von Ihnen erwähnten SMIL-Polyfill-Bibliotheken.
2) Nur weil etwas von einem Standardisierungsgremium ratifiziert wurde, heißt das nicht, dass es nicht auslaufen wird (oder überhaupt nie implementiert wird – siehe IE, das keinerlei Unterstützung für SMIL hat). Letztendlich entscheiden Browser, welche Technologien sie unterstützen, unabhängig von „Standards“.
3) GSAP gibt es seit einem Jahrzehnt und hat *noch nie* ein kostenloses Werkzeug in ein kostenpflichtiges umgewandelt, Preise für etwas erhöht oder hinterhältige Taktiken angewendet, wie Sie es sich vorstellen könnten. Vertrauen ist für uns super wichtig. Aber es ist fair, Möglichkeiten aufzuzeigen.
4) In gewisser Weise ist eine Bibliothek wie GSAP „sicherer“, da sie viel agiler ist und viel schneller auf Browserfehler und Inkonsistenzen reagieren kann als Standardisierungsgremien oder Browserhersteller. Ich denke, die Erfolgsbilanz von GSAP beweist das sicherlich.
Das Web wäre ohne Standards lahmgelegt… aber stellen Sie sich vor, wie eingeschränkt das Web heute wäre, wenn wir uns *nur* auf Standards verlassen würden (keine Bibliotheken/Frameworks/Plugins)! Ich denke auch nicht, dass es fair ist, Standards als so unveränderlich oder von der Stilllegung betroffen darzustellen. Ich schätze, dass GSAP-basierte Animationen in 5 Jahren konsistenter über Browser hinweg laufen werden als jede heute erstellte SMIL-Animation, und das ist letztendlich das, was für viele Entwickler zählt.
@Jack, Sie haben in allem Recht. Aber Sie übersehen immer noch den wichtigsten Punkt: alles, was Sie gesagt haben, ergibt für Programmierer Sinn. Aber wie kann ein Künstler mit GSAP arbeiten? Wie kann er eine Animation, die er in OpenToonz oder Animate erstellt hat, mit einer bestimmten JavaScript-Bibliothek speichern und archivieren? Sie brauchen etwas, das unabhängig von einer bestimmten Bibliothek funktioniert. Und Daten sollten vom Code getrennt sein, da man nicht von der Implementierung abhängig sein kann. Auch proprietäre Bibliotheken wie GSAP sind im Web cool, aber es gibt kein GSAP für mobile Apps. Wenn ich meine Animation auf einer iOS-App reproduzieren möchte, wie mache ich das? Selbst wenn ich eine Bibliothek kaufe, die das Paket (HTML+JavaScript+CSS) unter iOS abspielen kann, müsste sie eine JavaScript-VM emulieren, und das ist verdammt langsam (auch unter iOS sind VMs überhaupt nicht erlaubt, aber das ist eine andere Sache). Die Alternative wäre, dass jemand einen spezifischen Viewer für iOS für „GSAP“ codiert, aber das würde gegen Ihr Urheberrecht verstoßen, da eine solche Bibliothek dieselben GSAP-Bibliotheksfunktionen nativ neu schreiben müsste.
Wie Sie sehen, ist GSAP, egal wie gut es für Programmierer ist, für Künstler und Animatoren nicht nützlich. Künstler, die animierte SVG-Icons als Beruf machen, haben nur eine Option, und das ist SMIL. Natürlich sind hier alle Programmierer, mich eingeschlossen, also kümmern wir uns nicht um Künstler und Grafiker. Aber ich versichere Ihnen, wenn diese Leute von dieser Technologie ferngehalten werden, werden Sie die Qualität der Animationen kaum über das geringe Maß hinaus verbessern, das Sie durch programmgesteuerte Animationen erzielen können. Es wäre, als würde man Leute zwingen, Bitmap-Bilder im Web mit einer Menge von .putpixel()-Funktionen über JavaScript zu erstellen, anstatt JPGs und PNGs aus Photoshop zu verwenden. Ich bezweifle, dass das Web ein schöner Anblick wäre.
Deshalb wird ein Datenstandard für die Speicherung von Vektoranimationen GEBRAUCHT. SVG SMIL leistet das, und zwar gut. Es gibt keinen anderen Standard, der ihn ersetzt. Vielleicht wird eines Tages ein neuer geboren. Aber bis dahin wird SMIL die einzige ernsthafte Option für professionelle Künstler und Animatoren sein.
Hier ist ein Beispiel für eine SVG SMIL-Datei mit einer Cartoon-Episode mit synchronisiertem eingebettetem Audio, wie es nur ein Künstler tun kann
https://imgh.us/LoveDota.svg
Die Animation mit dem Audio wird in Chrome und Firefox korrekt wiedergegeben.
In Safari gibt es keine Audiospur, aber der Fehler wird derzeit überprüft
https://bugs.webkit.org/show_bug.cgi?id=155778
Glauben Sie, dass der Animator, der dies mit Animate CC gemacht hat, dasselbe mit GSAP oder einer anderen JavaScript-Bibliothek tun wird? Ich glaube nicht.
Ohne SMIL verlieren Sie einfach die Option, komplexe Animationen wie diese im Web zu haben. Deshalb wird SMIL bleiben.
Wenn Sie sich Sorgen um automatisierte Ausgaben machen, sollten Sie Bodymovin in Betracht ziehen, eine der oben genannten Bibliotheken. Sie gibt SVG und JavaScript aus. Danke!
Danke @Sarah, ich liebe das Bodymovin Add-on für After Effects. Aber leider exportiert es immer noch keine Datendatei, die Sie wie ein Standardformat zwischen verschiedenen Grafikprogrammen austauschen können. Es ist kein Dateiformat, das Sie wie SVG laden können. Es ist eine komplette Webseite, bestehend aus HTML-, JavaScript-, CSS- und SVG-Dateien, die für eine sehr spezifische Plattform und Technologie zusammengestellt wurden. Es ist nicht plattformunabhängig wie SVG oder PNG. Sie können nicht einfach Vektoranimationen in diesem Format speichern und sie beispielsweise als animierte Icons in einer mobilen App verwenden. Natürlich können Sie die native After Effects-Projektdatei als Animationsformat verwenden, aber das ist ein proprietäres Format. Es hat also alle Nachteile eines proprietären Formats, der wichtigste ist, dass Sie kein Tool zum Bearbeiten solcher Dateien erstellen können, ohne Lizenzgebühren an Adobe zu zahlen. Auch Adobe diktiert das Format, und es liegt in ihrem Interesse, es verschlossen, obskur und nur mit ihren Werkzeugen verbunden zu halten.
Mit SVG SMIL kann ein Künstler stattdessen eine Animation in jedem Softwaretool erstellen, sie exportieren und in ein anderes Tool zum Compositing oder zum Erstellen einer Benutzeroberfläche für eine mobile App oder eine Webseite oder eine Videospiel-UI laden. Eine SVG SMIL-Animation ist ein Standard, und deshalb können Künstler Animationen darin speichern und sie überall verwenden, von Videospielen in Unity mit dem SVG Importer über professionelle TV-Videoproduktionen mit OpenToonz oder AfterEffects, bis hin zu Adobe Experience Design oder Invision zum Entwerfen von Anwendungs-UIs mit animierten Komponenten, in einem ePub-Schulbuch, oder in einer mobilen App. Sie können diese SVG-Datei in der gesamten Produktionskette verwenden, effizient und mit der Zuverlässigkeit einer PNG-Datei, auf jeder gegenwärtigen und zukünftigen Plattform. Sie müssen sich keine Sorgen um proprietäre Lock-Ins machen oder JavaScript-Code interpretieren, der für einen Browser geschrieben wurde, und versuchen, ihn in nativen Code zu konvertieren. Ein mit SVG SMIL erstellter animierter Button funktioniert perfekt sowohl auf einer Webseite als auch in einer mobilen App, in einem ePub-E-Book, in einer Videospiel-UI oder in jedem Video. Können Sie das von einer Adobe After Effects-Projektdatei sagen? Oder von einem Webpaket, das vom Bodymovin-Plugin exportiert wurde? Nein, das können Sie nicht. Es gibt keine Möglichkeit, das in einer Produktionskette zum Laufen zu bringen. Bodymovin ist eine sehr spezifische und kundenspezifische Lösung. Es ist kein PNG. SVG SMIL ist das PNG der Vektoranimationen. Und jeder Entwickler kann einfach Unterstützung dafür in seiner Software hinzufügen, so wie er es mit PNG-Bildern tun kann. Wir sollten den Schatz verteidigen, der der SVG SMIL-Standard ist. Es ist etwas, das sehr schwer zu erreichen war. Viele gierige Konzerne haben jahrelang hart darum gekämpft, dies zu verhindern, und sie haben es geschafft, die SVG-Adoption jahrelang zu verlangsamen und sie zu behindern, indem sie die Hinzufügung grundlegender Funktionalitäten wie Textumbruch verboten haben. Erst jetzt, dank der großartigen Arbeit außergewöhnlicher Menschen wie Ihnen, wie Sara Soueidan oder Dmitry Baranovskiy, holt sich SVG seine Rache. Es ist an der Zeit, dass die Leute erfahren, dass ein besseres Web bereits vor 10 Jahren möglich war, aber es wurde bewusst auf Eis gelegt, weil einige private Unternehmen gierig waren. Aber man kann eine gute Sache nicht zu lange aufhalten. Irgendwann werden die Leute es herausfinden. Deshalb wird sogar Googles jüngste Maßnahme, SMIL abzuschaffen, letztendlich scheitern, wie die Maßnahme, SVG zuerst von Microsoft und dann von Adobe zu zerstören, letztendlich gescheitert ist. Offenheit und Standards gewinnen immer gegen Geschlossenheit und Proprietärität. Das Web selbst ist ein Banner der Wahrheit, das dies beweist.
Ehrlich gesagt, Emanuele, Sie klingen ein bisschen wie eine kaputte Schallplatte. Ich verstehe nicht, warum Sie versuchen, die Unterstützung aller mit Ihren Worten zu kaufen, aber das wird nicht passieren. Studio Ghibli exportiert mit SMIL, Viber verwendet SVG mit SMIL… eh, ehrlich gesagt, wen kümmert's? Ich wette, *sie* kümmern sich auch nicht darum.
Sie sagen, Sie vertreten keinen Entwicklerstandpunkt, und das ist in Ordnung, aber der Punkt ist, dass jedes Werkzeug, das nicht für Entwickler ist, seine Benutzer niemals mit technischen Details belasten sollte, wie z. B. was zum Animieren eines SVG verwendet wird. Für einen Designer/Animator sollte es keinen Unterschied machen, ob sein Werkzeug mit SMIL oder Web Animation exportiert, es sollte völlig transparent sein. Ich sollte Sie nicht daran erinnern, dass SVGs JavaScript-Code enthalten können, oder?
Es ist einfach so, dass SMIL aus der Sicht der Entwicklung schrecklich ist, deshalb wird es abgelöst. So einfach ist das. Und in diesem Beitrag geht es um Entwicklung, da liegt der Haken. GSAP wurde in der Tat besprochen, weil es großartig für die Entwicklung ist. Selbst die reine Web Animation API ist *weit* besser als SMIL.
Nun befinden wir uns irgendwie mitten in einem Übergang, und vielleicht sind Sie deshalb besorgt/verwirrt/desorientiert, aber zu versuchen, Ihre Welt in der Vergangenheit festzuhalten, ist nicht gut. Es wird eine Weile dauern, aber letztendlich wird alles gut, da die Industrie es verlangt.
@MaxArt Erstens ist SMIL überhaupt nicht schrecklich. Es ist die eleganteste Sprache zur Animationsbeschreibung, die je entworfen wurde. Fragen Sie jeden IT-Akademiker. Zweitens: Die Unternehmen kümmern sich um SMIL, weil es eine Sprache zur Beschreibung von Daten ist. Mit anderen Worten: Es enthält die Informationen über die Vektoranimation. Es sagt Ihnen nicht, wie Sie sie ausführen sollen. Es enthält KEINEN CODE, der in ihrer Anwendung ausgeführt werden muss. Glauben Sie mir: Selbst wenn Sie eine Standardmethode zum Speichern von Vektoranimationen in einer SVG+JAVASCRIPT-Datei definieren, wird kein Softwareentwicklungsunternehmen sie in seine Anwendung laden. Denn das Laden und Ausführen von nicht vertrauenswürdigem Code in Ihrer Anwendung ist NICHT sicher. Glauben Sie wirklich, dass Adobe, Serif oder Autodesk, Corel, Microsoft, Google oder irgendein anderes Unternehmen jemals ein Dateiformat wählen wird, das potenziell bösartigen Code enthält? Code, den Sie ausführen müssen, um die Animation abzuspielen? Das wäre die schlechteste Designentscheidung für Software, die je getroffen wurde. Kein Softwareingenieur wird ein Dateiformat mit Code definieren, der darin ausgeführt wird. Die Probleme liegen nicht nur in der Gefahr von nicht vertrauenswürdigem Code, sondern auch in etwas, das Sie ausführen müssen, um es zu dekodieren. Sie kennen den Code darin nicht, also ist die einzige Möglichkeit, zu wissen, was in Frame 291 passiert, die gesamte Animation abzuspielen. Ein Datenbeschreibungsformat liefert Ihnen stattdessen die Informationen, nicht den Code. Sie müssen nichts ausführen. Sie wissen genau, wie Frame 291 aussehen wird, weil dieser Frame durch diese Informationen auf eine einzigartige, vorhersagbare und standardisierte Weise definiert ist.
Nun, die Interpretation einer Sprache jedes Mal, wenn Sie eine Datei laden, ist langsamer, als Ihren nativen App-Code zu verwenden. Leistungsmäßig ist das ein Killer. Es ist, als ob der MPEG-Standard Sie gezwungen hätte, ein JavaScript-Codefragment, das in der .mpeg-Datei enthalten ist, zur Laufzeit auszuführen, und das für jeden gerenderten Frame. Nur der dümmste Ingenieur würde einen Videostandard so definieren. Und doch denken Sie, dass das eine gute Sache für SVG-Animationen ist? Ich glaube Ihnen nicht. Ich denke, Sie wissen, wie ineffizient und dumm es ist, Animationen auf diese Weise zu speichern, und ich denke, Sie wissen, dass der einzige Grund, warum wir das tun, darin liegt, dass das Web ein Chaos ist. Es gibt keine rationale Vision dahinter, sondern nur eine Reihe von Geschäftskonkurrenten, die alles in ihrer Macht Stehende tun, um zu verhindern, dass sich ein einziger Standard, den sie nicht besitzen, durchsetzt. Es ist ihnen egal, ob es einen echten Standard für das Web gibt, und noch weniger, ob es einen rationalen Standard gibt. Alles, was sie kümmert, ist, Entwickler einzusperren, uns ihre Bibliotheken und Werkzeuge aufzuzwingen und den Kampf um Webstandards zu nutzen, um das Ökosystem der mobilen Apps zu gewinnen und zu kontrollieren. Warum glauben Sie, dass JavaScript immer noch die Sprache des Webs ist? JavaScript ist nicht einmal eine echte Programmiersprache. Es ist ein Chaos, das Netscape in einer Woche erstellt hat! Es ist die schlechteste Sprache aller Zeiten, und doch betreiben wir das World Wide Web damit! Es gibt viele moderne und wunderbare Sprachen, die das W3C morgen früh als neuen Webstandard genehmigen könnte. Warum tun sie es also nicht? Weil sie die Zustimmung der Browser-Anbieter benötigen und sie sich nicht auf etwas gut Gestaltetes einigen wollen, das am besten funktioniert. Sie wollen gegeneinander kämpfen. Und deshalb sind Künstler, die heute ein einfaches animiertes Icon erstellen müssen, gezwungen, 4 verschiedene Sprachstandards (HTML, CSS, JavaScript, SVG) zu verwenden, um etwas zu machen, das ein rationaler Designer mit nur SVG machen würde. Glücklicherweise für uns verwenden die Leute in vielen anderen Bereichen zunehmend reines SVG für Vektorgrafikanimationen. Mobile Apps, Videospiele, Videobearbeitung... in all diesen Bereichen verwenden die Leute SVG. Nicht gemischt mit HTML, JavaScript und CSS. Nur SVG. Und es erfüllt seine Aufgabe wunderbar. Aber im Web gibt es einen Browserkrieg, und so ist ein einfaches Standard-Dateiformat für Vektorgrafikanimationen Ketzerei für die gierigen Browser-Anbieter. Nun, sie werden nicht gewinnen. Denn der menschliche Geist ist fähig, etwas so viel Besseres zu schaffen als das Chaos, das das Web jetzt ist, und wenn wir unserer Vernunft folgen, anstatt sie aus blinder Gier zu behindern, können wir erstaunliche Dinge schaffen.
Während es stimmt, dass ältere Canvas-Grafiken/Animationen möglicherweise nicht in hoher DPI gerendert werden, ist die Fähigkeit dazu schon seit einiger Zeit vorhanden. Es ist nur eine Frage der Skalierung der Canvas- und Kontextabmessungen nach oben, während eine konstante CSS-Breite/Höhe beibehalten wird.
https://jsfiddle.net/yokf2qmk/
Dieser alte Artikel beschreibt detaillierter, was vor sich geht
http://www.html5rocks.com/en/tutorials/canvas/hidpi/
Aus persönlicher Erfahrung: Ich erstelle meine Canvas-Demos oft immer noch in Nicht-High-DPI, nur um eine bessere Bildrate zu erzielen. Ich ziehe flüssige Animationen gegenüber knackigen Animationen auf Canvas vor.
Danke für den hilfreichen Beitrag, Sarah!
Falls andere mehr Beispiele für React + GSAP benötigen, meine Website hat einige: https://kylegach.com, und der vollständige Quellcode ist auf GitHub verfügbar.
Großartig! Danke.
Ähm, GIF ist nicht auf dieser Liste. Welche GIFs? (Hinweis: Plural von "GIF" wird wie "gibt" ausgesprochen)
Bool, hör mal, Kumpel. GIFs gehören eindeutig nicht zur W3C CSS3-Spezifikation. Ich schlage vor, du machst weiter und passt dich den Zeiten an.
Ganz im Gegenteil. https://www.w3.org/Graphics/GIF/spec-gif89a.txt
Dein Zug. Oder sollten wir sagen, "Schachmatt?"
GIFs sind nichts, was man programmatisch handhaben kann, und haben in dieser Diskussion keinen Platz.
(Und wenn Sie über animierte Bilder sprechen möchten, wählen Sie zumindest kein Format, das abgrundtief alt und ineffizient ist wie GIF.)
Ich weiß, dass man nicht jedes Werkzeug vergleichen kann, aber ich denke, ein wichtiges, das Sie nicht aufgenommen haben, ist Pixi.js. Ich bin mir nicht einmal sicher, zu welcher Ihrer Kategorien es gehören würde. Es ist eine 2D-Canvas-Bibliothek, aber sie hat auch vollständige WebGL-Unterstützung. Es ist wie Flash, aber ohne die GUI.
Wie die meisten Canvas-Bibliotheken verwendet Pixi einen vollständigen Szenengraphen, es ist also nicht nur ein Pixelklumpen. Es gibt eine tatsächliche Hierarchie, was bedeutet, dass Sie HTML-Elemente und Ereignisse darauf abbilden können. Was bedeutet das? Sie können Canvas zugänglich machen.
Schauen Sie es sich an. Sie können mit der Tab-Taste durch alle Schaltflächen navigieren und mit ihnen interagieren, indem Sie Leertaste/Enter drücken.
http://www.goodboydigital.com/pixijs/accessibility/accessibility.html
Ich habe noch nicht viel darüber gehört. Sieht cool aus, Blake! Ja, ich habe mich auf Technologien beschränkt, mit denen ich entweder gearbeitet habe oder die mich begeistern, wie im Artikel angegeben. Aber eine gute Entdeckung.
Sie können Bewegungspfade mit SVG haben – unter Verwendung von getPointAtLength() auf dem Pfad-Element.
Weil sich niemand der Autoren darum kümmert. Wie alles im Land ist auch die Retina-Unterstützung manuell, aber sie ist bereit.
Zur Klarstellung, Retina-Ready bedeutet Auflösungsunabhängigkeit. Sie können hohe Pixeldichten in Canvas erstellen, aber es erfordert Nachdenken und Erstellung. Das ist die Unterscheidung, die wir hier treffen, im Gegensatz zu Vektoren, wo dies nicht erforderlich ist.
Die Vor- und Nachteile sind nicht dazu gedacht, die Technologie zu kritisieren, sondern Informationen, die Menschen bei der Entscheidung helfen sollen, was sie verwenden sollen. Daher kläre ich diesen Abschnitt mit einem zusätzlichen Satz, da die Leute verwirrt zu sein scheinen.
WOW! Danke!
Es ist nicht allzu schwierig. Machen Sie die Canvas-Dimension auf 200 % im Inhalt (oder 300 % auf einem 3-fachen Bildschirm) und machen Sie sie auf 100 % in CSS. Jetzt sieht Ihr Canvas auf Retina-Displays scharf aus.
Siehe Kommentar oben, danke.
Das ist aus folgenden Gründen nicht einfach zu tun
1 – Sie kennen die wahre Auflösung des aktuellen Displays nicht.
2 – Es gibt jetzt zu viele Displays mit zu vielen Auflösungen, die von einer Switch-Anweisung behandelt werden können.
3 – Sehr wenige mobile Browser stellen eine API zur Abfrage der wahren Display-Auflösung bereit
4 – Retina oder höher auflösende Displays werden jetzt auch auf Desktop-Computern immer häufiger
5 – Viele Benutzer möchten auf der Seite zoomen, weil ihr Display zu klein ist (das Deaktivieren des Zooms auf einer Webseite macht Besitzer von 3,5-Zoll-Geräten wütend und ist eine schlechte Praxis). Das Zoomen macht für SVG-Elemente und Symbole keinen Unterschied in der Schärfe, aber es macht Canvas-Elemente hässlich mit Pixelbildung und Aliasing.
Dies, kombiniert mit der Tatsache, dass Canvas-Elemente von Suchmaschinen nicht wie SVG indiziert werden können, macht Canvas für die Mehrheit der Webseiten praktisch nutzlos, mit Ausnahme von Online-Webspielen, bei denen keine Suchmaschinenindizierung erforderlich ist und die Benutzer selten Text lesen, der eine pinch-gezoomte Seite erfordert.
@Sarah
Danke. Ich habe es gelesen, nachdem ich diesen Kommentar gepostet habe.
Ich würde sagen, Canvas ist nicht auflösungsunabhängig, aber es ist Retina-Ready.
Alles, was Sie brauchen, ist eine generische Utility-Funktion, um die Canvas zu vergrößern und sie für jede Canvas aufzurufen. (Es ist CreateJS-Code, aber das gleiche Konzept gilt für die gesamte Canvas-API. Es ist am Anfang etwas Planung, aber die gleiche Korrektur gilt für alle Projekte ohne weitere Überlegung.)
Danke @Emanuele Auch.
Wir brauchen die Auflösung nicht. Wir reden doch nicht über responsiv?
Was wir brauchen, ist die Pixeldichte. (technisch gesehen pro Punkt) `Window.devicePixelRatio` liefert die 2x, 3x-Informationen, und die meisten Browser unterstützen sie sowohl auf Mobilgeräten als auch auf Desktops.
Sie haben Recht. Canvas ist kein Vektor. Es ist ein Bitmap, und das Zoomen der Seite mit Canvas ist dasselbe wie das Zoomen einer Seite mit PNG/JPEG-Bild. Aber es schmälert nicht den Punkt, dass Canvas Retina unterstützt. Zoomen ist eine Frage von Vektor vs. Bitmap / Layoutstrategie, aber nicht der Punkt von Retina.
Das hängt vom Projekt ab. Wenn Sie die besten Barrierefreiheitsfunktionen zu Canvas hinzugefügt haben, sollten Suchmaschinen und Menschen mit Behinderungen keine Schwierigkeiten haben, den Inhalt von Canvas zu verstehen. Das gilt gleichermaßen für Text in `
`-Tags und den Versuch, Suchmaschinen-Bots oder sehbehinderten Menschen die Bedeutung des Bildes zu vermitteln.
Ich bin nicht voreingenommen gegenüber Canvas oder irgendeiner Technologie. Sie sind für einen Zweck konzipiert. Wenn sie noch nicht veraltet sind, bieten sie immer noch ihren Wert. Daher würde ich nicht zustimmen, dass Canvas "für die Mehrheit der Webseiten nutzlos" ist. Sie haben einfach noch keinen Weg gefunden, es in Ihrem Projekt zu verwenden.
Danke nochmal :-)
Ich bin überrascht, dass Leute immer noch Velocity.js erwähnen, das vor ein paar Jahren nett war, aber klar weit hinter anderen wie Animateplus https://github.com/bendc/animateplus zurückbleibt, welches meine Lieblings-Animationsbibliothek ist, während ich auf WAAPI warte, um überall nutzbar zu sein: zuerst ES6, UMD-Build, NPM-veröffentlicht, gute Performance, weniger Gewicht...
Ich bin im SMIL-Lager. Warum Renderings in JavaScript verpacken, wenn Sie SVG/XML mit Fallbacks (HTML5, Web GL, CSS, verbunden mit lokal ladenden Symbolbibliotheken) haben, die mit Greensock/Animate CC erstellt wurden? Sie können tatsächlich mit gebrandeten Inhalten designen und das, was Sie bauen, mit Ihrem Kunden vorab anzeigen. Es gibt einen enormen Wert darin, das, was Sie präsentieren, vor/nach der Transpilierung ändern zu können. Ich bin ein ehemaliger Flasher. Ich arbeite mit Bildern.
Das war eine gute Zusammenfassung! Ich möchte jedoch einige der Performance-Informationen klarstellen.
Erstens ist der Hauptvorteil von CSS-Animationen/Übergängen in Bezug auf die Leistung nicht die Auslagerung an die GPU. GPU-Komposition animierter Ebenen kann auch auf geskriptete Animationen angewendet werden (vorausgesetzt, sie animieren die gleichen Arten von Eigenschaften: transform, opacity). `will-change` hilft hier, aber viele Browser erkennen automatisch skriptgenerierte Animationen und wenden diese Optimierung nach ein paar Frames an.
Der Leistungsvorteil von CSS-Animationen/Übergängen besteht darin, dass diese Animationen, die auf der GPU komponiert werden können, auch an einen separaten Thread oder Prozess delegiert werden können. Dies ermöglicht es ihnen, reibungslos weiterzulaufen, auch wenn der Haupt-Thread beschäftigt ist. Das ist etwas, das geskriptete Animationen einfach nicht können, es sei denn, sie verwenden CSS-Animationen/Übergänge oder die Web Animations API im Hintergrund. (Und das ist eine sehr signifikante Optimierung auf Low-End-Mobilgeräten!)
Was die Leistung der Web Animations API betrifft, so ist sie identisch mit der von CSS-Animationen/Übergängen. Es ist genau derselbe Code, der beide ausführt. Der gesamte Zweck der Web Animations API ist es, eine Low-Level-API zu sein, über der CSS-Animationen/Übergänge laufen. (Und SMIL auch, was das angeht.)
Seien Sie auch bei React vorsichtig mit Dingen wie `react-router` und `ReactCSSTransitionGroup`. Wenn Sie versuchen, den nächsten Inhalt als Reaktion auf eine URL-Änderung zu animieren, fügt dieses Setup den Inhalt zum DOM hinzu, wenn Sie animieren möchten. Das führt zu erheblichen Verzögerungen beim Start der Animation. Sie sollten besser den Inhalt, den Sie animieren möchten, bereits im DOM haben, aber einfach aus dem sichtbaren Bereich verschoben oder transparent gemacht haben (und mit `will-change: transform` oder was auch immer markiert). Dann erhalten Sie eine sofortige Reaktion, wenn Sie navigieren.
Danke für die wertvollen Informationen, Brian.
Sie sind derjenige, der derzeit die wichtigste Web-Spezifikation EVER schreibt: SVG 2.0 Animationen (Link: https://svgwg.org/specs/animations/ ).
In Anbetracht Ihrer Schlüsselrolle für die Zukunft des Webs hier einige Fragen
1 – Werden die Spezifikationen rechtzeitig zur offiziellen Finalisierung von SVG 2.0 fertiggestellt sein?
2 – Werden die SVG 2.0 Animationsspezifikationen abwärtskompatibel mit den aktuellen SMIL-Animationen sein?
3 – Laut Ihrem Dokument zielt die SVG 2.0 Animationsspezifikation darauf ab, CSS ähnlicher zu sein und es Browser-Anbietern zu ermöglichen, denselben Code sowohl für CSS- als auch für SVG-Animationen zu verwenden. Bedeutet das, dass wir Ping-Pong-Animationen (d. h. ein animierbares Attribut, das die Animationsrichtung definiert) zu den SVG-Animationsspezifikationen hinzufügen können?
Danke! :)