Das Folgende ist ein Gastbeitrag von Jack Doyle, dem Autor der GreenSock Animation Platform (GSAP). Jack arbeitet viel mit Animationen im Browser und hat festgestellt, dass die allgemeine Meinung, "CSS ist schneller", einfach nicht stimmt. Es ist sogar noch mehr als das. Ich lasse ihn erklären.
Es war einmal, da nutzten die meisten Entwickler jQuery, um Dinge im Browser zu animieren. Dieses einblenden, jenes erweitern; einfache Sachen. Als interaktive Projekte aggressiver wurden und mobile Geräte auf den Plan traten, wurde die Leistung immer wichtiger. Flash verschwand und talentierte Animatoren drängten HTML5 dazu, Dinge zu tun, die es noch nie zuvor getan hatte. Sie brauchten bessere Werkzeuge für komplexe Sequenzierungen und erstklassige Leistung. jQuery war einfach nicht dafür konzipiert. Browser reiften und boten Lösungen an.
Die am meisten gefeierte Lösung waren CSS-Animationen (und Transitions). Seit Jahren der Liebling der Branche, wurden CSS-Animationen endlos auf Konferenzen diskutiert, wo Phrasen wie "hardwarebeschleunigt" und "mobilfreundlich" die Ohren des Publikums kitzelten. JavaScript-basierte Animationen wurden behandelt, als wären sie veraltet und "schmutzig". Aber ist das so?
Als jemand, der von Animation und Leistung fasziniert ist (eigentlich schon besessen), bin ich eifrig auf den CSS-Zug aufgesprungen. Ich kam jedoch nicht weit, bevor ich eine Reihe großer Probleme entdeckte, über die niemand sprach. Ich war schockiert.
Dieser Artikel soll das Bewusstsein für einige der gravierenderen Mängel von CSS-basierten Animationen schärfen, damit Sie die Kopfschmerzen, die ich hatte, vermeiden und eine fundiertere Entscheidung treffen können, wann JS und wann CSS für Animationen verwendet werden sollte.
Mangelnde unabhängige Steuerung von Skalierung/Rotation/Position
Das Animieren von Skalierung, Rotation und Position eines Elements ist unglaublich häufig. In CSS sind sie alle in einer "Transform"-Eigenschaft zusammengefasst, was es unmöglich macht, sie auf einem einzelnen Element auf wirklich unterschiedliche Weise zu animieren. Was ist zum Beispiel, wenn Sie "Rotation" und "Skalierung" unabhängig voneinander mit unterschiedlichen Timings und Eases animieren möchten? Vielleicht pulsiert ein Element kontinuierlich (oszillierende Skalierung) und Sie möchten es beim Überfahren drehen. Das ist nur mit JavaScript möglich.
Siehe das Pen Independent Transforms von GreenSock (@GreenSock) auf CodePen
Meiner Meinung nach ist dies eine eklatante Schwäche in CSS, aber wenn Sie nur einfachere Animationen durchführen, die den gesamten Transformationszustand zu einem bestimmten Zeitpunkt animieren, ist dies kein Problem für Sie.
Performance
Die meisten Vergleiche im Web stellen CSS-Animationen gegen jQuery, da es so weit verbreitet ist (als wären "JavaScript" und "jQuery" synonym), aber jQuery ist allgemein dafür bekannt, in Bezug auf die Animationsleistung recht langsam zu sein. Das neuere GSAP ist ebenfalls JavaScript-basiert, aber es ist buchstäblich bis zu 20x schneller als jQuery. Ein Teil des Grundes, warum JavaScript-Animationen einen schlechten Ruf bekamen, ist das, was ich den "jQuery-Faktor" nenne.
Der am häufigsten zitierte Grund für die Verwendung von CSS für Animationen ist „Hardwarebeschleunigung“. Klingt lecker, oder? Lassen Sie es uns in zwei Teile aufteilen
GPU-Beteiligung
Die GPU ist hochoptimiert für Aufgaben wie das Verschieben von Pixeln und das Anwenden von Transformationsmatrizen und Opazität, daher versuchen moderne Browser, diese Aufgaben von der CPU auf die GPU zu verlagern. Das Geheimnis besteht darin, die animierten Elemente auf eigenen GPU-Layern zu isolieren, denn sobald ein Layer erstellt ist (solange sich seine nativen Pixel nicht ändern), ist es für die GPU trivial, diese Pixel zu verschieben und zusammenzusetzen. Anstatt jeden einzelnen Pixel 60 Mal pro Sekunde zu berechnen, kann sie Pixelblöcke (als Layer) speichern und einfach sagen: "Verschiebe diesen Block um 10 Pixel nach rechts und 5 Pixel nach unten" (oder was auch immer).
Randnotiz: Es ist nicht ratsam, jedem Element eine eigene Ebene zu geben, da GPUs nur begrenzten Videospeicher haben. Wenn dieser aufgebraucht ist, wird alles drastisch langsamer.
Wenn Sie Ihre Animationen in CSS deklarieren, kann der Browser bestimmen, welche Elemente GPU-Ebenen erhalten sollen, und sie entsprechend aufteilen. Super.
Aber wussten Sie, dass Sie das auch mit JavaScript machen können? Das Setzen einer Transformation mit einer 3D-Eigenschaft (wie translate3d() oder matrix3d()) veranlasst den Browser, eine GPU-Ebene für dieses Element zu erstellen. Der GPU-Geschwindigkeitsschub ist also nicht nur für CSS-Animationen – JavaScript-Animationen können ebenfalls davon profitieren!
Beachten Sie auch, dass nicht alle CSS-Eigenschaften den GPU-Schub bei CSS-Animationen erhalten. Tatsächlich die meisten nicht. Transformationen (Skalierung, Rotation, Translation und Schrägstellung) und Opazität sind die Hauptnutznießer. Nehmen Sie also nicht einfach an, dass, wenn Sie mit CSS animieren, alles magisch GPU-optimiert wird. Das stimmt einfach nicht.
Auslagerung von Berechnungen an einen anderen Thread
Der andere Teil der „Hardwarebeschleunigung“ hat damit zu tun, dass ein anderer CPU-Thread für animationsbezogene Berechnungen verwendet werden kann. Auch dies klingt in der Theorie großartig, ist aber nicht ohne Kosten, und Entwickler überschätzen oft die Vorteile.
Zunächst können nur Eigenschaften, die den Dokumentfluss nicht beeinflussen, wirklich an einen anderen Thread delegiert werden. Daher sind auch hier Transformationen und Opazität die Hauptnutznießer. Wenn Sie andere Threads abspalten, ist die Verwaltung dieses Prozesses mit Overhead verbunden. Da die Grafikwiedergabe und das Dokumentlayout in den meisten Animationen die meisten Verarbeitungsressourcen verbrauchen (bei WEITEM) (nicht die Berechnung der Zwischenwerte von Eigenschafts-Tweens), ist der Vorteil der Verwendung eines separaten Threads für die Interpolation minimal. Wenn beispielsweise 98 % der Arbeit während einer bestimmten Animation Grafikwiedergabe und Dokumentlayout sind und 2 % die Ermittlung der neuen Positions-/Rotations-/Opazitäts-/was-auch-immer-Werte, selbst wenn Sie diese 10-mal schneller berechnen würden, würden Sie insgesamt nur eine 1 %ige Geschwindigkeitssteigerung feststellen.
Leistungsvergleich
Der folgende Stresstest erstellt eine bestimmte Anzahl von Bildelementen (Punkte) und animiert sie von der Mitte zu zufälligen Positionen an den Rändern mit zufälligen Verzögerungen, wodurch ein Sternenfeld-Effekt entsteht. Erhöhen Sie die Anzahl der Punkte und sehen Sie, wie sich jQuery, GSAP und Zepto vergleichen. Da Zepto CSS-Übergänge für alle seine Animationen verwendet, sollte es die beste Leistung erbringen, richtig?
Siehe das Pen Speed Test: GSAP vs Zepto (CSS Transitions) vs jQuery von GreenSock (@GreenSock) auf CodePen
Die Ergebnisse bestätigen, was im Web weit verbreitet ist – CSS-Animationen sind deutlich schneller als jQuery. Auf den meisten von mir getesteten Geräten und Browsern schnitt jedoch das JavaScript-basierte GSAP sogar besser ab als CSS-Animationen (in einigen Fällen deutlich besser, z. B. auf dem Microsoft Surface RT war GSAP wahrscheinlich mindestens 5-mal schneller als die von Zepto erstellten CSS-Übergänge, und auf dem iPad 3 iOS7 waren Transformationen deutlich schneller, wenn sie mit GSAP anstelle von CSS-Übergängen animiert wurden)
| Animierte Eigenschaften | Besser mit JavaScript | Besser mit CSS |
|---|---|---|
| Oben, links, Breite, Höhe | Windows Surface RT, iPhone 5s (iOS7), iPad 3 (iOS 6), iPad 3 (iOS7), Samsung Galaxy Tab 2, Chrome, Firefox, Safari, Opera, Kindle Fire HD, IE11 | (keine) |
| Transformationen (Translate/Scale) | Windows Surface RT, iPhone 5s (iOS7), iPad 3 (iOS7), Samsung Galaxy Tab 2, Firefox, Opera, IE11 | iPad 3 (iOS6), Safari, Chrome |
Interessante Beobachtungen
- Beim Animieren von top/left/width/height (Eigenschaften, die den Dokumentfluss beeinflussen) war JavaScript durchweg schneller (GSAP, nicht jQuery).
- Einige Geräte schienen stark für Transformationen optimiert zu sein, während andere Top/Left/Width/Height-Animationen besser verarbeiteten. Besonders bemerkenswert ist, dass das ältere iOS6 mit CSS-animierten Transformationen viel besser zurechtkam, aber das neuere iOS7 drehte sich um, und jetzt sind sie deutlich langsamer (ich habe darüber hier gebloggt).
- Es gibt eine erhebliche Verzögerung beim initialen Start von CSS-Animationen, da der Browser Ebenen berechnet und die Daten auf die GPU hochlädt. Dies gilt auch für JavaScript-basierte 3D-Transformationen, sodass "GPU-Beschleunigung" nicht ohne eigene Kosten einhergeht.
- Unter starker Belastung waren CSS-Übergänge anfälliger dafür, in Bändern/Ringen aufzusprühen (dies scheint ein Synchronisierungs-/Planungsproblem zu sein, möglicherweise aufgrund ihrer Verwaltung in einem anderen Thread).
- In einigen Browsern (wie Chrome) tötete eine sehr hohe Anzahl animierter Punkte das Deckkraft-Ausblenden des Textes vollständig, aber nur bei Verwendung von CSS-Animationen!
Obwohl gut optimiertes JavaScript oft genauso schnell, wenn nicht sogar schneller als CSS-Animationen ist, sind 3D-Transformationen tendenziell schneller, wenn sie mit CSS animiert werden, was jedoch viel mit der Art und Weise zu tun hat, wie Browser heute 16-Element-Matrizen handhaben (Erzwingen der Konvertierung von Zahlen in eine verkettete Zeichenkette und zurück in Zahlen). Hoffentlich wird sich das jedoch ändern. In den meisten realen Projekten würde man den Leistungsunterschied sowieso nicht bemerken.
Ich möchte Sie ermutigen, Ihre eigenen Tests durchzuführen, um zu sehen, welche Technologie in Ihrem speziellen Projekt(en) die flüssigste Animation liefert. Glauben Sie nicht dem Mythos, dass CSS-Animationen immer schneller sind, und gehen Sie auch nicht davon aus, dass der obige Geschwindigkeitstest widerspiegelt, was Sie in Ihren Apps sehen würden. Testen, testen, testen.
Laufzeitsteuerung und Ereignisse
Einige Browser erlauben Ihnen, eine CSS-Keyframe-Animation anzuhalten/fortzusetzen, aber das war’s auch schon. Sie können nicht zu einer bestimmten Stelle in der Animation springen, Sie können auch nicht reibungslos teilweise umkehren oder die Zeitskala ändern oder Callbacks an bestimmten Stellen hinzufügen oder diese an eine reichhaltige Reihe von Wiedergabeereignissen binden. JavaScript bietet eine große Kontrolle, wie in der folgenden Demo gezeigt.
Siehe das Pen Impossible with CSS: controls von GreenSock (@GreenSock) auf CodePen
Moderne Animation ist sehr eng mit Interaktivität verbunden, daher ist es unglaublich nützlich, von variablen Startwerten zu variablen Endwerten animieren zu können (z. B. basierend darauf, wohin der Benutzer klickt), oder Dinge spontan zu ändern, aber deklarative CSS-basierte Animationen können das nicht.
Workflow
Für einfache Übergänge zwischen zwei Zuständen (z. B. Rollovers oder expandierende Menüs usw.) sind CSS-Transitions großartig. Zum Sequenzieren von Dingen müssen Sie jedoch in der Regel CSS-Keyframe-Animationen verwenden, die Sie zwingen, Dinge in Prozentangaben zu definieren, wie z. B.
@keyframes myAnimation {
0% {
opacity: 0;
transform: translate(0, 0);
}
30% {
opacity: 1;
transform: translate(0, 0);
}
60% {
transform: translate(100px, 0);
}
100% {
transform: translate(100px, 100px);
}
}
#box {
animation: myAnimation 2.75s;
}
Aber denken Sie beim Animieren nicht eher in Zeit als in Prozenten? Wie "die Deckkraft für 1 Sekunde einblenden, dann für 0,75 Sekunden nach rechts schieben und 1 Sekunde später bis zum Stillstand abprallen". Was passiert, wenn Sie stundenlang eine komplizierte Sequenz in Prozentangaben erstellen und der Kunde dann sagt: "Machen Sie den Teil in der Mitte 3 Sekunden länger"? Autsch. Sie müssten ALLE Prozentangaben neu berechnen!
Normalerweise beinhaltet die Erstellung von Animationen viel Experimentieren, insbesondere mit Timing und Eases. Hier wäre eine seek()-Methode tatsächlich sehr nützlich. Stellen Sie sich vor, Sie erstellen eine 60-sekündige Animation Stück für Stück und feilen dann an den letzten 5 Sekunden; Sie müssten die ersten 55 Sekunden jedes Mal durchlaufen, wenn Sie die Ergebnisse Ihrer Bearbeitungen an den letzten Teilen sehen möchten. Igitt. Mit einer seek()-Methode könnten Sie das während der Produktion einfach einfügen, um zu dem Teil zu springen, an dem Sie arbeiten, und es dann entfernen, wenn Sie fertig sind. Ein großer Zeitersparnis.
Es wird immer üblicher, Canvas-basierte Objekte und andere Bibliotheks-Objekte von Drittanbietern zu animieren, aber leider können CSS-Animationen nur DOM-Elemente ansprechen. Das bedeutet, wenn Sie viel Zeit und Energie in CSS-Animationen investieren, wird sich das nicht auf diese anderen Projekttypen übertragen. Sie müssen Ihre Animations-Toolsets wechseln.
Es gibt noch ein paar weitere Komfortfunktionen im Workflow, die bei CSS-Animationen fehlen
- Relative Werte. Zum Beispiel „die Rotation um 30 Grad mehr animieren“ oder „das Element um 100px von seiner Startposition nach unten bewegen“.
- Verschachtelung. Stellen Sie sich vor, Sie könnten Animationen erstellen, die in eine andere Animation verschachtelt werden können, die selbst wieder verschachtelt werden kann usw. Stellen Sie sich vor, Sie steuern diese Master-Animation, während alles perfekt synchron bleibt. Diese Struktur würde modularen Code fördern, der viel einfacher zu produzieren und zu warten ist.
- Fortschrittsbericht. Ist eine bestimmte Animation abgeschlossen? Wenn nicht, wo genau steht sie im Hinblick auf ihren Fortschritt?
- Gezieltes Beenden. Manchmal ist es unglaublich nützlich, alle Animationen zu beenden, die die "Skalierung" eines Elements (oder welche Eigenschaften Sie auch immer möchten) beeinflussen, während der Rest weiterlaufen darf.
- Prägnanter Code. CSS-Keyframe-Animationen sind ausführlich, selbst wenn man alle redundanten Herstellerpräfixe nicht berücksichtigt. Jeder, der versucht hat, etwas auch nur mäßig Komplexes zu erstellen, wird bestätigen, dass CSS-Animationen schnell umständlich und unhandlich werden. Tatsächlich kann das schiere Volumen an notwendigem CSS zur Bewältigung von Animationsaufgaben das Gewicht einer JavaScript-Bibliothek übersteigen (die einfacher zu cachen und über viele Animationen hinweg wiederzuverwenden ist).
Begrenzte Effekte
Mit CSS-Animationen können Sie Folgendes nicht wirklich tun:
- Entlang einer Kurve animieren (wie ein Bézierpfad).
- Interessante Eases wie Elastic, Bounce oder eine grobe Ease verwenden. Es gibt eine
cubic-bezier()-Option, aber sie erlaubt nur 2 Kontrollpunkte, daher ist sie ziemlich begrenzt. - Verwenden Sie in einer CSS-Keyframe-Animation verschiedene Eases für verschiedene Eigenschaften; Eases gelten für den gesamten Keyframe.
- Physikbasierte Bewegung. Zum Beispiel das sanfte, auf Impuls basierende Flickern und Zurückfedern, das in dieser Draggable-Demo implementiert ist.
- Die Scrollposition animieren
- Gerichtete Rotation (z. B. „Animation auf genau 270 Grad in der kürzesten Richtung, im oder gegen den Uhrzeigersinn“).
- Attribute animieren.
Kompatibilität
CSS-basierte Animation funktioniert nicht in IE9 und früher. Die meisten von uns hassen die Unterstützung älterer Browser (insbesondere IE), aber die Realität ist, dass einige unserer Kunden diese Unterstützung benötigen.
Browser-Präfixe sind für viele Browser notwendig, aber Sie können Preprocessing-Tools nutzen, um das manuelle Schreiben zu vermeiden.
Fazit
Sind CSS-Animationen "schlecht"? Sicherlich nicht. Tatsächlich sind sie hervorragend für einfache Übergänge zwischen Zuständen (wie Rollovers), wenn die Kompatibilität mit älteren Browsern nicht erforderlich ist. 3D-Transformationen funktionieren normalerweise sehr gut (iOS7 ist eine bemerkenswerte Ausnahme), und CSS-Animationen können für Entwickler sehr attraktiv sein, die es vorziehen, ihre gesamte Animations- und Präsentationslogik in der CSS-Schicht abzulegen. JavaScript-basierte Animationen bieten jedoch weit mehr Flexibilität, einen besseren Workflow für komplexe Animationen und reichhaltige Interaktivität, und sie sind oft genauso schnell (oder sogar schneller) als CSS-basierte Animationen, entgegen dem, was Sie vielleicht gehört haben.
Verglichen mit jQuery.animate() kann ich verstehen, warum CSS-Animationen so attraktiv waren. Wer bei klarem Verstand würde nicht die Chance nutzen, einen 10-fachen Leistungszuwachs zu erzielen? Aber es ist nicht mehr die Wahl zwischen jQuery und CSS-Animationen; JavaScript-basierte Tools wie GSAP eröffnen völlig neue Möglichkeiten und beseitigen die Leistungslücke.
In diesem Artikel geht es nicht um GSAP oder eine bestimmte Bibliothek; der Punkt ist, dass JavaScript-basierte Animationen keinen schlechten Ruf verdienen. Tatsächlich ist JavaScript die einzige Wahl für ein wirklich robustes, flexibles Animationssystem. Außerdem wollte ich einige der frustrierenden Aspekte von CSS-Animationen beleuchten (über die niemand zu sprechen scheint), damit Sie letztendlich eine fundiertere Entscheidung darüber treffen können, wie Sie im Browser animieren.
Wird die Web Animations Spezifikation die Dinge lösen?
Das W3C arbeitet an einer neuen Spezifikation namens Web Animations, die viele der Mängel in CSS-Animationen und CSS-Transitions beheben soll, indem sie bessere Laufzeitsteuerungen und zusätzliche Funktionen bietet. Es scheint sicherlich in vielerlei Hinsicht ein Fortschritt zu sein, aber es hat immer noch Mängel (einige davon sind wahrscheinlich aufgrund der Notwendigkeit der Legacy-Unterstützung bestehender CSS-Spezifikationen unüberwindbar, so dass zum Beispiel eine unabhängige Steuerung von Transformationskomponenten unwahrscheinlich ist). Das ist jedoch ein ganz anderer Artikel. Wir werden abwarten müssen, wie sich die Dinge entwickeln. Es arbeiten definitiv einige kluge Köpfe an der Spezifikation.
Funktioniert der GSAP-Test im Geschwindigkeitsvergleich für sonst niemanden? Ich sehe nur einen Punkt und keine Animation. Neuestes Safari unter Mavericks.
Sorry, JP – das war nur ein Problem mit der Codepen-Einbettungseinstellung, die die Ausführung automatisch stoppt. Es sollte jetzt behoben sein.
Dieser Artikel ist voreingenommen und die Tests sind selektiv.
Dieser Artikel ist im Grunde eine kostenlose Werbung für GSAP.
Wenn jemand Animationen mit HTML5, JS und CSS im Web erstellt und die Verwendung von GSAP noch nicht in Betracht gezogen hat, ist er verrückt.
Ich werde alle dummen, anonymen, negativen Kommentare schließen.
schlechte Art, mit Kritik umzugehen.
Nein.
Nein, was?
Ich denke, das ist es, was er mit "nope" meint: Myth Busting Mythbusted
Ist das ein Argument, um nicht zu argumentieren? Was für ein seltsamer Beitrag.
Das Problem mit Chris’ Argument ist, dass dieser Artikel auf Fakten und Experimenten basiert (wie selektiv auch immer), aber sein Blogbeitrag auf seinem Idealismus und seiner Vorstellung davon, wie die Webentwicklungs-Welt funktionieren sollte.
Chris sagt im Grunde: „Ja, diese Bibliotheken funktionieren wahrscheinlich gut, aber wenn es ein Problem mit der Webplattform gibt, sollten wir versuchen, die Webplattform zu reparieren, anstatt uns auf Bibliotheken zu verlassen.“
Ich bin im Prinzip nicht anderer Meinung, aber die Sache ist die, dass einige von uns in der realen Welt leben und Dinge vor 2016 erledigen müssen. Der Autor geht auf die Tatsache ein, dass neue Web-Animations-Spezifikationen in der Pipeline sind, aber es wird Jahre dauern, bis sie in allen Browsern (I.E. hust) verfügbar sind, und sie scheinen veraltet zu sein, bevor sie überhaupt implementiert werden.
Außerdem hat CSS-tricks einen Kommentarbereich, der es Chris ermöglicht, völlig unkonstruktive Beiträge wie „nope“ zu schreiben, und doch hat seine eigene Website kein Kommentarsystem, sodass andere seine Aussagen nicht kritisieren können. Massiver Fehler.
Ich bin wirklich überrascht von den Hatern, ich fand den Artikel gut recherchiert und gründlich. Persönlich habe ich JavaScript immer dann als notwendig (oder zumindest bei weitem am einfachsten) empfunden, wenn man über eine einfache Animation hinausgeht. Die massive 'transform'-Eigenschaft ist die schlechteste, mit der man arbeiten kann.
Ich bin nicht super begeistert, weitere JS-Bibliotheken zu einer Seite hinzuzufügen, aber ich sehe derzeit keine andere Option für komplexe Animationen.
Ein Wermutstropfen bei JS-Animationen, glaube ich, ist der Batterieverbrauch. Mein Bauchgefühl sagt, dass all diese JS-Berechnungen viel Strom verbrauchen, aber ich habe keine Tests, um es zu beweisen.
Ich bin auch daran interessiert, die Unterschiede im Stromverbrauch zwischen den verschiedenen Animationstechniken zu erfahren. Während ich mir in vielen Fällen vorstellen kann, dass der Unterschied vernachlässigbar ist, könnte ich mir vorstellen, dass Dinge wie Endlosschleifen optimiert werden sollten.
Und an Jack: Toller Artikel. Es spricht sehr für GSAP, dass ihr diese Art von Grundlagenforschung betreibt.
Ich habe keine schlüssigen Tests zu diesem Thema zur Hand, aber ich erinnere mich, dass, als sein Steveness sich darüber beschwerte, dass Flash die Akkus von Geräten leer saugt, jemand ein Android-Gerät mit ähnlichen Animationen in Flash und in HTML5/CSS/JS getestet hat und letzteres viel mehr Strom benötigte. Wir konnten dies mit unserem eigenen Test reproduzieren.
Ich sehe keinen wirklichen Grund, warum es einen signifikanten Unterschied im Batterieverbrauch geben sollte. Am Ende muss die Hardware ohnehin ähnliche Aufgaben erledigen, und wie der Artikel feststellt, ist es die eigentliche Darstellung, die die meiste Leistung (= Energie) benötigt. Die Art und Weise, wie Sie dies erreichen, spielt keine so große Rolle.
Aber selbst wenn, abgesehen von Browserspielen, die man länger spielen kann/wird und die ohnehin viel komplexe Skripte benötigen, dauert der Besuch und die Nutzung einer Website normalerweise höchstens einige Minuten. Wenn man mit einem Batterieladezyklus von mindestens 24 Stunden für Ihr Gerät rechnet, selbst wenn diese Minuten 50% oder 100% mehr Strom verbrauchen als die Alternative, wird es kaum relevant sein, und nicht jedes Gerät wird gleich reagieren.
Also: keine Sorge. Selbst wenn es wahr wäre, was ich aufrichtig bezweifle, wäre es kaum relevant und sollte die Anbieter nur motivieren, die dringend benötigte JavaScript-Leistung (und den Energieverbrauch) in den Griff zu bekommen.
Ich stimme Matthew zu, das war gut recherchiert und ich bin wirklich enttäuscht von der Reaktion der Community auf einen sehr praxisorientierten Artikel. Es wurden keine Regeln oder Einschränkungen auferlegt, es geht lediglich darum, eine Perspektive für diejenigen zu geben, die über die Verwendung von CSS-Animationen gegenüber JavaScript/jQuery-Animationen debattiert haben.
@iDad Es hat wahrscheinlich viel mit der Art und Weise zu tun, wie Browser Animationen optimieren. JS ist seitdem sicherlich viel schneller geworden, daher könnte sich sein Saftverbrauch zum Besseren oder Schlechteren geändert haben. Vielleicht gleicht GPU-Auslagerung die Wettbewerbsbedingungen aus.
Mein Gedanke basierte auf einer Animation, die ich mit Übergängen erstellt hatte, bei der ich etwa 50% von dem, was ich wollte, erreicht hatte und es schön und flüssig war, der Browser hatte keine Schwierigkeiten. Ich stieß auf eine Entwicklungswand und machte es mit JS neu und stellte fest, dass der Browser die CPU hochfuhr und ziemlich hart arbeitete. Immer noch flüssig und großartig, aber schien härter zu arbeiten.
Dennoch ist der Batterieverbrauch ein Aspekt, der in vielen Diskussionen ziemlich ignoriert wird. Vielleicht aus gutem Grund, es ist wahrscheinlich kein Dealbreaker, wenn man eine Seite nur für kurze Zeit nutzt.
Betreffend CSS-Animation, was ist mit der Ausführung der Funktion "onComplete"?
Ich habe in meiner Karriere viele verschiedene Animationswege ausprobiert. Ich habe eine Reihe verschiedener Methoden und Bibliotheken getestet und ausprobiert.
Ich denke, sowohl CSS-Animationen als auch Javascript-Animationen haben ihren Platz (wie in diesem Artikel erwähnt). Ich stimme zu, dass GSAP in Bezug auf Javascript-Performance und Workflow-Einfachheit erstklassig ist. Es zeigt, dass Javascript effizient eingesetzt werden kann, um wirklich erstaunliche Dinge zu erreichen, die CSS einfach nicht kann.
Ich persönlich fand diesen Artikel sehr wahr und interessant.
Wer glaubt, der Artikel sei nur eine Werbung für GSAP, hat meiner Meinung nach den Sinn des Artikels völlig verfehlt.
Als vollständige Offenlegung: Ich bin ein Freund von Jack (weil ich seine Tools seit den AS3-Tagen benutze), also nehmen Sie meine Kommentare mit jeder Voreingenommenheit, die Sie sich vorstellen mögen. Das gesagt, ich benutze GSAP seit einigen Jahren und ich benutze es jetzt ausschließlich in JS. Ich bin der festen Überzeugung, dass CSS für die Präsentationslogik und nicht für Animationen ist, und das ist einer meiner Hauptgründe, warum ich CSS-Animationen nicht verwende. Der größte Grund ist jedoch die Tatsache, dass CSS-Animationen einfach nicht all die Dinge können, die JS kann. Ich weiß nicht, wie viele von Ihnen im selben Boot sitzen wie ich, aber die meisten meiner Arbeiten sind für relativ große Unternehmenskunden, bei denen Abwärtskompatibilität ein Muss ist. Ich kann mir nicht vorstellen, einige der Dinge, die ich tue, nur in CSS zu programmieren (oder sie wären einfach nicht möglich).
Ich weiß, Sie mögen sagen "es wird erwartet, dass ältere Browser eine andere Erfahrung machen", aber das muss nicht unbedingt so sein. Und an diejenigen, die sagen "die Tests sind voreingenommen" oder "das ist eine Werbung für GSAP", probieren Sie es selbst aus, machen Sie Ihre eigenen Tests und ziehen Sie Ihre eigenen Schlüsse. Ich denke, Sie werden angenehm überrascht sein, was Ihnen geboten wird. Und die Tatsache, dass es hier als "Werbung" gepostet wird, macht Sie wütend? Es versucht, den Horizont von Menschen zu erweitern, die es vielleicht nicht kennen, wie kann das etwas Schlechtes sein? Wenn Sie aus diesem Beitrag nur herausgelesen haben, dass es sich um eine Werbung handelt, dann haben Sie den Punkt offensichtlich verfehlt.
Matt – Sie sagen, dass CSS für die Präsentationslogik und nicht für Animationen gedacht ist. Es ist richtig, dass CSS-Animationen einfach nicht all die Dinge können, die JS kann. Aber um Ihre Aussage zu widerlegen, JavaScript selbst war nie als kreative oder Animationssprache gedacht. Daher würde ich argumentieren, dass weder JavaScript noch CSS Animationen per se gut handhaben.
Ich glaube nicht, dass die Leute darüber streiten, ob GSAP für einen Entwickler einen Wert bietet. Sie streiten darüber, dass der Artikel voreingenommen ist, indem er (CSS vs. JavaScript) vs. GSAP sagt. Das macht diesen Artikel gefährlich, weil er nur ein Framework bewirbt. Außerdem vergleicht dieser Artikel sehr wenig natives JavaScript mit CSS3. Stattdessen vergleicht er GSAP mit jQuery. Wenn es eine kostenlose Bibliothek wäre, würden sich die Leute wahrscheinlich weniger um die Promotion kümmern.
Ich glaube nicht, dass die Leute den Punkt verfehlen. Ich glaube, sie sind verwirrt, weil der Autor nicht gut erklärt hat, WAS GSAP anders macht und warum es leistungsfähiger ist als die reine Verwendung von jQuery vs. JavaScript vs. CSS-Kombinationen. Stattdessen wirkte dieser Artikel eher eigennützig.
Guter Punkt, David – ich habe keine Details dazu behandelt, wie man schnelleres JavaScript schreibt. Ehrlich gesagt, hatte ich es sehr schwer, diesen Artikel relativ prägnant zu halten, wie er ist (ich bin wirklich leidenschaftlich bei diesem Thema und könnte noch LANGE darüber reden), und wenn ich in eine Reihe von Tipps und Techniken zur Optimierung von JavaScript eingetaucht wäre, würde er zu lang und würde den Fokus verlieren. Ich denke, dieses Thema verdient einen eigenen Artikel. In diesem Artikel habe ich mich jedoch wirklich darauf konzentriert, einige der Schwachstellen von CSS-Animationen aufzudecken, über die niemand zu sprechen scheint, und zu zeigen, dass JavaScript-Animationen keinen schlechten Ruf verdienen, und einige einzigartige Dinge zu zeigen, die nur mit JavaScript möglich sind. Beachten Sie, dass ich auch einige Stärken von CSS anspreche.
Es tut mir leid, wenn der Artikel eigennützig wirkte; ich habe versucht, mich davon abzuhalten, über spezifische Funktionen und Vorteile zu sprechen, die einzigartig für GSAP sind, und stattdessen den Fokus hauptsächlich auf das allgemeinere Thema CSS-Animation und JavaScript-Animation zu legen. Ich schätze, das ist mir nicht gut genug gelungen. Und zur Klarstellung: GSAP ist für die überwiegende Mehrheit der Anwendungsfälle, sogar kommerzielle, völlig kostenlos. Tatsächlich denke ich, dass die Lizenz eine der Stärken des Gesamtpakets ist, da sie in vielerlei Hinsicht geschäftsfreundlicher ist und mehr Stabilität für laufende Innovationen und Support bietet als andere gängige Open-Source-Lizenzen. Das ist auch wieder ein eigener Artikel :)
Ich stimme David vollkommen zu, der Artikel kann sich etwas voreingenommen anfühlen. Aber ich kann mich der Tatsache anschließen, dass GSAP tatsächlich sehr schnell ist und dass es viel Arbeit gekostet hat, dies zu erreichen. Ich habe selbst versucht, all diese Animationssachen besser zu verstehen, und ich wäre sehr an einem technischen Beitrag von Jack interessiert, der erklärt, was die schwarze Magie in GSAP ist, die es so schnell macht. Denn am Ende ist es "nur" Javascript.
Ich stimme Davids Ansicht zu. JavaScript-Animationen sind nicht gleich GSAP. Ich muss viel Zeit aufwenden, um dies den Schülern zu erklären (was, wenn ich eine weniger wohlwollende Person wäre, ich als die Absicht dieses Beitrags ansehen könnte). Auch denke ich, dass es hier Probleme mit dem Ton des Autors gibt, was bedauerlich ist. Ich hatte selbst Probleme mit dem Ton, und das kann die Reaktion der Öffentlichkeit auf ein Stück wirklich beeinflussen. Das heißt, mein Posteingang ist immer offen für eine Tonprüfung eines guten Animationsbeitrags ;)
Interessanter Beitrag und danke fürs Teilen!
Ich bin so froh, GreenSock lebendig und aktiv zu sehen! Ich habe ihr Tool in den Flash-intensiven Tagen ausschließlich benutzt, und sie brachten immer solide Daten, Vergleiche und Beispiele auf den Tisch. Ich bin froh zu sehen, dass sich nichts geändert hat! Es ist großartig, Mythen wie "CSS ist immer bestorz" entlarvt zu sehen. Danke für den Artikel.
Ich schätze die starke, meinungsstarke Haltung dieses Beitrags, untermauert mit echten Daten und Live-Beispielen. Für komplexe Animationen und Interaktivität ist dieser Ansatz einen Blick wert.
Ich persönlich verwende in meiner täglichen Arbeit nicht viele Animationen. Die meisten Animationen, die ich verwende, sind das Ein- und Ausblenden von Abschnitten auf einer Seite. Vielleicht skaliere ich ein oder zwei Knöpfe, nichts so Extremes. Der einzige Ort, an dem solche Hardcore-Animationen verwendet würden, ist die Spieleentwicklung, und wenn Sie das tun, sollten Sie keine Standard-HTML-Elemente verwenden, um Ihr Spiel zu erstellen, Canvas ist Ihr Freund.
Ich dachte früher dasselbe – bis letzte Woche, als ich anfing, mit verschiedenen Animationen für ein neues Projekt herumzuspielen. Sobald Sie einen Fuß in den Pool der CSS-Animationen und -Übergänge setzen, werden Sie eine ganze Welt schöner Präsentationstechniken entdecken. Ich habe eine Demo einiger Ideen (alles reines CSS) erstellt, wie man über das übliche Ein- und Ausblenden hinaus verbessern kann.
Ich frage mich, ob dies nur der aktuelle Zustand der Browser ist, insofern sie noch nicht so intelligent in Bezug auf CSS-Animationen sind.
Ich denke, die Unterscheidung zwischen „Animieren mit JavaScript“ und „Animieren mit CSS“ ist in diesem Artikel etwas verwirrend.
Wichtiger ist es, die Anzahl der Reflows und Paints zu reduzieren, und vieles davon hängt davon ab, wie gut Sie den Browser-Rendering-Prozess kennen.
Man kann schlechte JavaScript-Animationen machen, und man kann schlechte CSS-Animationen machen. Sie haben unterschiedliche Anwendungsfälle, aber ehrlich gesagt ist die JavaScript-Ausführung meist nicht das Problem – es ist das Painting/Reflow.
CSS-Animationen durch Hinzufügen und Entfernen von Klassen zu steuern, ist eine dumme Wahl!
CSS-Animationssteuerung ist Mist
GSAP-Animationssteuerung ist der Hammer
Ich habe GSAP und Javascript-Animationen verwendet, weil ich auch aus der AS3-Welt komme und das Schreiben von Javascript-Code für mich natürlicher erscheint.
Aber einen sehr wichtigen Aspekt möchte ich hervorheben: Ein weiteres erstklassiges Canvas-Framework, KineticJS, hat seine Animations-Engine auf GSAP umgestellt, weil es eine Leistungssteigerung von über 16% bot.
Der Grund, warum ich dies erwähne, ist, dass mit Javascript sogar Canvas-Animationen möglich sind, was mit CSS-Animationen nicht möglich ist.
Natürlich sind CSS-Animationen der richtige Weg für einfache/oder komplexe UI-Verbesserungen.
Großer Zufall! Ich habe mich gerade mit GSAP beschäftigt und es für ein aktuelles Projekt in Betracht gezogen, nachdem ich es im Quellcode einiger animationsintensiver, preisgekrönter Websites gefunden hatte.
Bei der Recherche war ich etwas verwirrt von GSAPs seltsamer Webpräsenz: Die Bibliothek wird aktiv entwickelt, aber die Webseite und Dokumentation sehen ziemlich alt aus; und ich habe Schwierigkeiten, ausreichende Gespräche darüber zu finden – ich finde nur Befürwortung oder Schweigen. Ich habe kein Problem mit der Befürwortung (so bringen Sie andere dazu, Ihre Bibliothek zu nutzen und Feedback zu geben, und wenn Sie sie erstellt haben, glauben Sie hoffentlich daran) – aber warum äußern sich andere nicht zu GSAP? Wo sind die Blogbeiträge und StackOverflow-Antworten, die die Vor- und Nachteile von GSAP erklären, die es verwenden, um Probleme zu lösen, die jQuery und CSS nicht adäquat lösen? Warum scheinen die aktuellen Gespräche über Browser-Animationen dieses Tool zu ignorieren? Warum lassen die zahlreichen Artikel zur Animationsleistung auf HTML5 Rocks usw. es in der Diskussion aus? Die Frontend-Evangelisten, auf die ich (und viele andere) mich verlassen, um mich an großartige Dinge heranzuführen, schienen entweder a) seine Präsenz nicht zu kennen oder b) aus unbekannten Gründen zu schweigen. (Ich habe gerade heute darüber nachgedacht, eine Frage an die ShopTalk-Show zu schreiben, um zu fragen, ob diese beiden Meinungen zu GSAP haben.)
Also: Ich bin wirklich froh, dass Chris diesen Artikel veröffentlicht hat (und danke Jack fürs Schreiben), und ich hoffe, dass er dazu führt, dass GSAP und ähnliche Tools in die vielen Gespräche über Animationen aufgenommen werden.
Ich benutze die Tools von Greensock seit mehreren Jahren, sowohl Flash als auch JavaScript, und ich kann sagen, dass sie den Preis wert sind. Sie haben ihre Website schon länger nicht mehr geändert, aber die Dokumentation ist aktuell, und die Foren sind aktiv und äußerst hilfreich. Antworten von GS sind prompt und sehr hilfreich. Selten wird eine Frage unbeantwortet oder ungelöst bleiben. Die Bibliotheken selbst sind extrem einfach zu bedienen. Ich habe nicht viel mit JavaScript gemacht, aber der Umstieg war ziemlich einfach.
GreenSock veröffentlicht fast alle 6 Wochen oder öfter einen neuen Artikel oder einen langen News-Beitrag. Aber ich stimme zu, GreenSocks 'Ökosystem' ist sehr, sehr klein; Projekte/Blogs/Repos, die JS GSAP verwenden, sind im Vergleich zu jQuery sehr schwer zu finden.
Ich stimme zu, dass die Greensock-Website sehr hilfreich ist, voller Demos, Dokumentation, dem von @Patrick Mullady gelobten Forum usw. – es fehlt dort nicht an Material, das uns hilft, ein sehr nützliches Tool zu beherrschen. (Ich finde die Syntax auch ziemlich intuitiv, jetzt, da ich etwas damit herumspiele.) Ich wollte meine obigen Worte nicht wie eine Beschwerde klingen lassen, falls sie so rüberkamen – nur ein Kommentar zu der merkwürdigen Tatsache, dass die Kanäle, auf die ich mich normalerweise verlasse, um mich auf großartige Dinge aufmerksam zu machen, bisher zu GSAP, soweit ich weiß, geschwiegen haben, und ich finde das seltsam, da diese Kanäle immer über die Optimierung von Web-Animationen sprechen. Es ist kein "Problem", weil es niemandes Schuld ist; es ist einfach seltsam und einen Kommentar wert.
Ich bin seit über 10 Jahren in der UI/UX-Welt unterwegs und höre jetzt erst durch diesen Artikel (und ein paar weitere auf css tricks) von GSAP, und WOW! Ich war seit dem Aufkommen der CSS-Animationen ein Verfechter, aber beim Testen auf Mobilgeräten stellte ich fest, dass CSS-Animationen ehrlich gesagt Mist sind. Ich gehöre zu den Leuten, die HTML5-Mobile-Apps vorantreiben und sich von der nativen Welt abwenden wollen. CSS-Animationen geben HTML5-Mobile-Apps einen schlechten Namen… aber GSAP hat eine Tür für eine reibungslose Bereitstellung geöffnet. Ich werde GSAP jetzt zu meinem Hauptwerkzeug für Animationen machen, obwohl ich neugierig bin, was die Animation API und auch das neue Polymer von Google auf den Tisch bringen werden.
Vielen Dank, GreenSock, dass ihr so toll seid.
Schauen Sie, ich liebe GSAP, benutze es schon seit AS2/AS3, und ich wünschte wirklich, ich könnte seine eindeutig überlegenen Funktionen nutzen, wenn ich mit HTML-basierten Animationen arbeite. Leider leiden selbst die grundlegendsten Animationen (z. B. der sich drehende grüne Knopf oben im Artikel) unter einer niedrigen Bildrate auf einem iPad 3 (nicht das schnellste Gerät, aber ziemlich verbreitet). Ja, diese Animation ist mit CSS3 nicht möglich, aber sie ist auch mit GSAP oder jeder anderen Javascript-Tweening-Engine nicht flüssig.
Nicht flüssig ist für mich dasselbe wie nicht möglich. Ich würde die Animation lieber vereinfachen und bei dem bleiben, was CSS3 derzeit leisten kann, als eine ausgefallene Animation zu haben, die auf mobilen Geräten ruckelt.
CSS3-Animationen sind mühsam, sie haben begrenzte Fähigkeiten und sie haben Verzögerungen, ABER sie sind butterweich auf hochauflösenden mobilen Geräten. Wenn Sie Webanwendungen hauptsächlich für mobile Geräte entwickeln und Leistung für Sie alles ist, gibt es derzeit keine bessere Option.
Scott, ich habe auch ein iPad 3, daher bin ich sehr überrascht von Ihrer Erfahrung. Ich hatte einige komplexe Dinge mit GSAP animiert, und es lief butterweich auf meinem iPad. Tatsächlich war es in einigen Fällen viel flüssiger als CSS-Übergänge! Vielleicht war in Ihrem Szenario etwas anderes im Spiel. In jedem Fall untermauert dies den Punkt, dass es am besten ist, zu testen, testen, testen. Manchmal ist CSS sehr wohl schneller (wie ich im Artikel erwähne). Ich würde jedoch die pauschale Aussage, dass GSAP auf Mobilgeräten wie einem iPad immer langsamer ist, respektvoll in Frage stellen. Oft (zumindest nach meinen Tests) war das Gegenteil der Fall.
Jack, ich stimme zu, ich sollte wahrscheinlich mehr Tests mit GSAP durchführen, um die Fälle zu finden und zu verstehen, in denen seine Leistung genauso gut, wenn nicht sogar besser ist als die von CSS3.
Hier ist ein Video-Beispiel dessen, worüber ich bezüglich der schlechten Leistung gesprochen habe: https://www.dropbox.com/s/lpfehb4d8waj6sg/IMG_3804.MOV
Beachten Sie das Ruckeln und die übersprungenen Frames, wenn ich auf 'skip rotationX' oder 'Spin rotation' klicke. Dies ist ein so einfaches Beispiel, dass ich keinen Grund für ein Ruckeln sehe.
Meiner Erfahrung nach braucht es viel mehr, um eine CSS3-Animation auf dem iPad zum Ruckeln zu bringen, und wenn es passiert, geschieht es auf eine ganz andere Weise. Anstatt Frames zu überspringen, wie es bei Javascript-Tweens der Fall ist, benötigt die CSS-Animation einen zusätzlichen Moment zum Starten, spielt dann aber flüssig ab, sobald sie läuft. Das mag nach Haarspalterei klingen, aber ich finde diese Art von Leistungsabbau für den Benutzer wünschenswerter und angenehmer.
Hier ist ein Beispiel für die Leistungsverschlechterung von CSS3: https://www.dropbox.com/s/8j6dqht3ugw3h2o/IMG_3809.MOV
Wenn ich die Schaltflächen der oberen Navigationsleiste drücke, gibt es eine leichte Verzögerung, während das iPad versucht, diesen Inhalt in den Speicher zu laden (alle Inhalte sind lokal, keine Netzwerklatenz). Bei Seiten mit einfachem Inhalt werden die Elemente schnell mit sehr geringer Verzögerung geladen. Wenn ich die Schaltfläche bei 0:15 klicke, sehen Sie eine längere Verzögerung, während das iPad versucht, eine sehr große Menge an Inhalt (etwa 20+ große Bilder) in den Speicher zu laden. ABER Sie sehen, dass CSS3 bewirkt, dass die Animation wartet, bis der Inhalt in den Speicher geladen ist, bevor sie versucht zu animieren, und dann animiert sie flüssig. Hätte ich Javascript für diese Animation verwendet, hätte der Tween versucht zu animieren, während das iPad noch mit dem Laden von Inhalt in den Speicher beschäftigt war, und bis das iPad aufgeholt hätte, wäre die Animation bereits ein gutes Stück fortgeschritten, was zu einem visuellen Ruckeln führen würde.
Nochmals, ich sollte mir die Zeit nehmen, weitere Tests durchzuführen, aber ich wollte Ihnen zeigen, worüber ich gesprochen habe.
Ich habe ein Samsung Galaxy 3 und als ich Animate.css gegen GSAP getestet habe…
Ich habe mich ziemlich sofort für GSAP entschieden.
Die Animationen waren bei animate.css sehr ruckelig und bei gsap sauber.
Was andere Geräte betrifft, habe ich nicht getestet…
Ich benutze Greensock in Flash, seit ich denken kann. Ich habe noch nie einen Flash-Entwickler getroffen, der Greensock nicht benutzt hat.
Als es auf JS portiert wurde, war ich begeistert. Es gab mir einen Bezugspunkt und Komfort, der mir half, meine Angst vor JS zu überwinden. Es gab mir auch das Vertrauen, andere Sprachen anzugehen.
Zum StackOverflow-Kommentar: Ich nutze StackOverflow für viele Codefragen. Wenn es jedoch um Greensock geht, nutze ich immer das Greensock-Forum. Es wird von Jack, Carl und vielen anderen moderiert, die alle Details der Codebasis kennen. Greensock-bezogene Fragen auf StackOverflow zu posten, macht keinen Sinn, wenn man Hilfe zu Greensock sucht. :)
Es ist albern zu glauben, dass dieser Artikel nichts weiter als eine Werbung ist. Obwohl ich Greensock an jedem Wochentag gerne bewerben würde. Ohne die JS-Portierung hätte ich verdammt viel Mühe gehabt, JS schnell von Grund auf zu lernen, um meine Fähigkeiten relevant zu halten. Greensock half mir an einem bestimmten Punkt, meinen Job zu behalten, und ich weiß, dass es vielen anderen genauso erging… also… danke.
Zwischen dem Greensock-Forum, StackOverflow, HTML5Rocks und CSS Tricks habe ich mehr gelernt, als ich jemals allein hätte lernen können.
Frieden und Liebe
Nachdem ich gerade eine sehr animations- und timeline-lastige Website mit GSAP fertiggestellt habe, kann ich mit Freude berichten, dass ich die Verwendung geliebt habe. Das war keine Überraschung, da ich TweenLite jahrelang als Actionscript-Entwickler gerne benutzt habe. Ich wage nicht zu denken, wie viel schwieriger meine Karriere als Entwickler ohne die verschiedenen Greensock-Plugins gewesen wäre.
Es ist wirklich überraschend, dass GSAP in JS-Kreisen nicht so bekannt ist wie TweenLite in AS-Kreisen, hoffentlich wird dieser Artikel das ändern und das zu Recht.
Bevor ich etwas sage, möchte ich festhalten, dass ich ein Greensock-Forum-Moderator bin, daher besteht die Möglichkeit, dass meine Kommentare ebenfalls als voreingenommen angesehen werden.
Es geht hier um CSS-Animationen und JS-Animationen. Das Fazit ist, dass man in Bezug auf die Performance mit beiden an eine Wand stoßen kann, wenn man mit seinem Code nicht vorsichtig ist. Die Grenze dessen, was man tun kann und was nicht, IST der Browser, nicht das Werkzeug. Programmierer schreiben keinen schlechten Code wegen JQuery, sie schreiben schlechten Code, weil sie sich nicht über gutes Codieren und die Best Practices der Sprachen informieren. JS-Animationsbibliotheken sind Werkzeuge, und Werkzeuge (wie zum Beispiel ein Schraubenschlüssel) können auf gute und schlechte Weise verwendet werden, aber das ist nicht die Schuld des Entwicklers. Auch sind Werkzeuge dazu da, die Dinge zu vereinfachen; das Arbeiten mit CSS-Animationen kann eine ziemliche Plackerei sein, wenn man etwas Anspruchsvolleres vorhat, selbst wenn man mit einem CSS-Präprozessor oder Grunt arbeitet. Die Steuerung der Animation mit CSS ist ausgeschlossen; selbst komplexe Sequenzen, Wiedergabesteuerung, Event-Callbacks und einiges andere sind in JS möglich, weil die Tools auf RAF laufen, worüber Leute seit mehr als zwei Jahren schreiben, wenn es darum geht, Dinge mit JS zu animieren.
All das berücksichtigt, die Tatsache, dass die Beispiele hier GSAP verwenden, liegt daran, dass Sie kein besseres Werkzeug finden werden und dies bei weitem kein selbstreferenzierender Artikel oder eine schamlose Werbung für GSAP ist. Es gibt einige Dinge über GSAP, die in diesem Artikel nicht erwähnt werden
<
ul>
Draggable Tool, das jetzt mit transformierten Objekten funktioniert.
SplitText-Tool
ThrowProps-Plugin
ScrollTo-Plugin
Schauen Sie sich auch Codepen an, besonders die Greensock-Sammlung, und sehen Sie sich die erstaunlichen Dinge an, die Sie mit GSAP machen können, und portieren Sie sie auf CSS-Animationen, dann verbreiten Sie den Hass.
@David Clark, die Vorteile von GSAP sind für jeden sichtbar, während die Nachteile die gleichen Nachteile anderer Animationswerkzeuge sind, vielleicht die Dateigröße, aber die beiden Hauptdateien für die Animation von DOM-Elementen sind 20kb komprimiert und GZIP, so dass dies die Seitenladezeit nicht mehr als ein einziges mittelgroßes Bild verzögern wird.
Es gibt immer kluge Leute, die an Spezifikationen arbeiten, auch an denen, die wir bereits haben :/
Auf ein baldiges Wiedersehen :)
Großartiger Artikel. Web-Animationen klingen wie eine JavaScript-API, die für mich wahrscheinlich nicht nützlich wäre, da ich meinen Präsentationscode typischerweise in einem Stylesheet getrennt halte. Für Dinge, für die wir typischerweise Flash verwendet haben, wird GSAP jedoch ausreichen. Es muss nur noch SVG 2.0 endlich mit Flash aufholen.
Beachten Sie, dass GSAP ein RaphaelJS- und ein KineticJS-Plugin besitzt, sodass Sie mit GSAP an Canvas und SVG arbeiten können.
Auch vor einiger Zeit kam dieser Beitrag bezüglich three.js in den Foren auf, schauen Sie sich den JSFiddle-Link an.
Im Grunde ist die Technik da, wir müssen nur darauf warten, dass die Browser aufholen.
Die Codebasis ist etwas zu groß, um nach einer kurzen Überprüfung sicher zu sein, aber wird nicht jeder Punkt/jede Animation neu erstellt, wenn der Punkt in der Mitte beginnt? In diesem Fall würde dieser Test nur beweisen, dass GSAP für diese spezifische Anwendung schneller ist, was meiner Meinung nach den Sinn von CSS-Animationen völlig verfehlt.
Großartiger Artikel, Jack, und ich hoffe, er verschafft deinem Tool mehr Bekanntheit in der JS-Community. Ich habe GSAP erst im letzten Jahr entdeckt und es hat zu wunderbaren Erfahrungen mit Animationen im Web geführt. Ich konnte Dinge erreichen, die mit CSS allein einfach nicht möglich gewesen wären. Ich würde allen Zweiflern empfehlen, es auszuprobieren, einige Zeitachsen und komplexe Animationssequenzen zu erstellen und einfach zu sehen, wie flexibel es ist und wie gut sie auf vielen Geräten laufen. Erstaunlich ist auch, wie abwärtskompatibel es sogar bis IE7 für viele Eigenschaften sein kann.
Verurteile es nicht, bevor du es selbst ausprobiert hast. Außerdem ist GSAP in den meisten Fällen kostenlos und in allen anderen super erschwinglich, es gibt keine Entschuldigung, es nicht zu versuchen.
GSAP ist eine Killer-Bibliothek. Wir können so viel mehr damit machen!
Jack Doyle sagt es sehr gut
Für einfache Animationen: CSS
Für komplexere Anforderungen: JavaScript (ich empfehle GSAP...;))
Toller Artikel! Sehr unvoreingenommen und vernünftig. Jeder, der etwas anderes behauptet, hat entweder den Artikel nicht gelesen, hat eine emotionale Bindung zu CSS-Animationen, ist ein Idiot oder einfach nur ein Trottel.
Ich mag diesen Artikel, wirklich hilfreich
JavaScript-Logik ist erforderlich, um einige Probleme bei CSS-Animationen zu lösen
http://lea.verou.me/2014/01/smooth-state-animations-with-animation-play-state/
Ich bin daran interessiert, mehr über JS-Programmierung zu erfahren, die Dinge tun kann, die CSS allein nicht kann. GSAP ist die Hauptbibliothek, über die ich neugierig bin, aber es gibt noch weitere wie animo.js
Jack war, so lange ich mich erinnern kann, ein Meister in Bezug auf Animationen durch Code. Ich war früher ein großer Fan von TweenMax, als ich mit Flash/ActionScript arbeitete, und es ist schön zu sehen, dass die ganze Kraft dieser Bibliothek auf den Browser übertragen wurde.
Ich verwende sehr viele Animationen in meinem täglichen Workflow, und ich nutze sowohl CSS als auch GSAP regelmäßig. Meine Meinung – CSS ist sehr gut für einfache Animationen wie das Animieren von Farbe und Position beim Mouseover, was großartig für einige kleine Projekte ist, aber man kann CSS-Animationen einfach nicht steuern. Was ich persönlich an JS-Animationen liebe, ist die Kontrolle – ich komme aus dem AS3-Hintergrund, daher sind Events bei update, Ende onEnd für mich entscheidend. Außerdem ist es unmöglich, fortgeschrittene interaktive Animationen mit CSS zu erstellen, wenn Eigenschaften (z.B. Start- und Endpositionen) während der Laufzeit berechnet werden müssen. Wenn Sie also keine Animationen auf Ihrer Website haben – gut, verwenden Sie CSS für Rollovers. Wenn Sie anspruchsvolle interaktive Erlebnisse erstellen – kommen Sie ohne JS (oder Flash/Silverlight, aber die sind aus dem Spiel, wissen Sie) einfach nicht aus, und für mich ist das beste Tool GSAP. Das Beste daran – es funktioniert einfach, und es funktioniert gut. In jedem einzelnen Browser, den ich getestet habe.
Sehr nerdy Zeug, aber ich mag es. Ich habe Greensock bei einem sehr komplexen Projekt eingesetzt, das die Animation von SVGs und Ähnlichem beinhaltete. Nach der Suche im Web nach Alternativen fand ich Greensock am leistungsfähigsten. Es war die Bibliothek, die das http://johnpolacek.github.io/scrollorama/ Scrollorama-Plugin antrieb, wenn ich mich richtig erinnere. Guter Artikel.
Ich mache schon lange (native) JS-Animationen und habe überlegt, einige davon auf CSS-Animationen umzustellen. Auswertungen ergaben die gleichen Ergebnisse wie im Artikel beschrieben. Es gab praktisch keine Vorteile, aber einige beträchtliche Nachteile.
Zudem gab es keinen Vorteil beim Threading: Probleme im Zusammenhang mit asynchronen Ladevorgängen (wie z.B. das Laden von APIs und Daten durch Social-Network-Buttons) waren die gleichen, vielleicht sogar noch schwerwiegender.
Fazit: CSS-Animationen mögen bequem sein (für einige einfache Effekte, die nur durch Bearbeiten von Stylesheets angewendet werden können), bieten aber bei komplexen Animationen keinen Leistungsgewinn.
GSAP hat das ursprüngliche Scrollorama nicht angetrieben, da es noch nicht für JavaScript verfügbar war. Sobald Jack es veröffentlichte, wechselte ich und veröffentlichte das neue und verbesserte SuperScrollorama.
Ich hatte schon lange das Gefühl, dass GSAP das bestgehütete Geheimnis in JavaScript ist. Es ist eine erstaunliche Bibliothek, aber Sie müssen mir nicht glauben. Gehen Sie einfach auf FWA oder Awwwards oder {fügen Sie hier eine Galerie cooler Websites ein} und sehen Sie sich den Quellcode von allem an, was Sie mit cooler Animation sehen, und Sie werden überrascht sein, wie weit verbreitet es ist.
Zum Beispiel verwendet die heutige FWA Site of the Day zufällig GSAP.
Schön zu lesen, dass es mehr Publicity bekommt.
Für mich: einfache Animationen: CSS, und GSAP für den Rest. Funktioniert einwandfrei (ich benutze es schon länger, auch vorher mit ActionScript).
Abgesehen davon: die Leute von Greensock sind großartig, bilden ein tolles Team, sehr geduldig und unterstützend. Ich hoffe, dass sie weiterhin rocken und "dieses" Zeug machen/verbessern, was sicherlich mit diesem Artikel hilft.
Für diejenigen unter Ihnen, die GSAP zum Erstellen von Animationen verwenden möchten, kann unser browserbasierter Animator ein guter Ausgangspunkt sein, um Ihnen beim Erstellen der Grundstruktur zu helfen. Schauen Sie ihn sich unter http://tweenui.com/animator an
Nachdem ich diesen Beitrag gelesen und dann CodeCanyon überprüft habe, stelle ich fest, dass gerade ein Skript gepostet wurde, das das oben genannte http://codecanyon.net/item/cool-text-incredible-animations/6546649 verwendet. Ich bin mir nicht sicher, ob es vom selben Autor dieses Beitrags stammt?
Hallo Rich,
Soweit ich sehen kann, basiert diese App auf GSAP (TweenMax), ist aber eigentlich ein jQuery-Plugin.
Greensock hat sein eigenes Textanimationswerkzeug, SplitText, das Sie hier überprüfen können.
Rodrigo.
Hey Jack,
Lange nichts mehr gehört! Deine GSAP-Bibliothek ist wie immer atemberaubend. Hast du jemals daran gedacht, den Quellcode von z.B. Firefox herunterzuladen und den Code dort hineinzuschreiben?? Das wäre der Hammer!
Ich hoffe, du hattest ein gutes Neujahr, alles Gute
Simon
Jack verdient Respekt für seine exzellente Arbeit. Die Eiferer, die CSS-Transitionen verteidigen, haben keine Ahnung, dass sie im Vergleich zu dem, was man mit Javascript machen kann, enorme Grenzen haben. Jetzt, wo ich sehe, dass es sogar besser funktioniert, bin ich froh, dass ich die Greensock-Lizenz damals gekauft habe.
Aus meinem Flash/ActionScript-Hintergrund kann ich Ihnen ehrlich sagen, dass das Leben ohne all die Tools von Jack (www.greensock.com) nicht einfacher war; sei es LoaderMax, TweenMax, Draggable, AutoFitArea, LiquidStage, der allmächtige TransformManager und vieles mehr. Und der Schlüssel zur Verwendung all dieser Tools war die Konsistenz und Ähnlichkeit, die sie zueinander hatten. Auch die Leistung war für diesen Mann (wie hier ersichtlich) von größter Bedeutung, so dass wir Entwickler in diesem Aspekt immer ein beruhigendes Gefühl hatten.
Meine bescheidene Meinung ist, dass diejenigen, die tatsächlich beide Techniken verwendet haben, am besten in der Lage wären, diese ewig lange Debatte über „CSS Animation vs. JavaScript Animation“ zu beurteilen, aber es wäre immer noch eine Frage des Geschmacks und/oder der Vorliebe. Für mich ist „Kontrolle“ der Schlüssel, an zweiter Stelle steht „Intuition“. Und GSAP bietet mir beides zusammen mit einer ganzen Reihe weiterer Funktionen (jedes Mal, wenn ich etwas Neues mit GSAP machen möchte, stelle ich fest, dass es bereits eingebaut ist und nur eine Frage der Zuweisung eines Wertes zu einer anderen Eigenschaft war). Vielleicht holen CSS-Animationen irgendwann auf, aber für mich ist GSAP im Moment die Lösung.
Lasst uns also aufhören, unsere Zeit mit Debatten zu verschwenden und uns stattdessen darauf konzentrieren, coole Sachen zu bauen.
Dieser Beitrag handelt nicht von Jquery, sondern von Javascript, das die gleichen GPU-Zugriffsvorteile wie CSS bietet, und mit GSAP kann man so viel coolere und nützlichere Dinge tun, die mit CSS unmöglich sind. Es geht nicht einmal darum, voreingenommen zu sein, es ist einfach wahr. Jack und sein Team haben mit GSAP wirklich einen tollen Job gemacht.
Hallo,
Als ein stark animationsbasiertes Projekt bei mir ankam, begann ich, verschiedene Ressourcen für den Aufbau zu prüfen, da ich wirklich das Gefühl hatte, dass CSS, jQuery oder Vanilla JS (zumindest für mich) wahrscheinlich nicht ausreichen würden.
Dann entdeckte ich GSAP. Ich hatte zuvor noch nie ein Flash-bezogenes Tool verwendet und hatte keine Ahnung, wie es funktioniert. Daher dachte ich, dass die Hürde für die Verwendung von GSAP zu hoch sein würde (ich hatte nur eine kurze Zeitspanne, um mich für dieses Projekt zu informieren).
Aber was GSAP mir bot, war einfach erstaunlich. Es erfordert nicht einmal ein tiefes Verständnis von JS, es bietet eine hervorragende Kontrolle über Timelines, Callbacks (), eine sehr breite Palette von Animationen und vieles, vieles mehr mit einer sehr einfachen und verständlichen Syntax.
Nach meiner Erfahrung ist CSS für nicht-Timeline-bezogene Animationen (Keyframes werden nicht besonders gut unterstützt) gut und einfach einzurichten, aber wenn es um komplexe Sequenzen geht und man präzise sein muss, bin ich sehr, sehr froh, GSAP zur Verfügung zu haben...
Also, guter Artikel und tolles Tool, danke!
Wie wäre es mit diesem Argument: Animationen sind dumm.
Sie wissen entweder nichts oder nur sehr wenig über Marketing.
Ich kenne mich jedoch mit elegantem Design mit statischem Text, schöner Typografie und geschmackvollen Grafiken aus. Nutzen Sie immer noch das Marquee-Tag?
Marquee-Tag? Seufz, diese Diskussion ist dumm geworden.
Schön ausgewogener und gut recherchierter Artikel!
Als langjähriger Flash- und JS-GSAP-Nutzer (und gelegentlicher Mitwirkender) war ich immer überrascht, dass es nicht mehr Leute nutzen. Abgesehen von Jacks laserfokussierter Detailverliebtheit ist es schnell, zuverlässig, flexibel, außergewöhnlich preiswert (sprich: in den meisten Fällen kostenlos) und, sehr wichtig, unterstützt.
Die Folgen der eher unzeremoniellen erzwungenen Abdankung von Flash ließen viele Animatoren, kreative Entwickler und interaktive Designer nach alternativen Wegen suchen, um Ergebnisse zu erzielen, die zuvor nur in Flash erreichbar gewesen waren.
Wenn Sie nicht der Typ sind, der keine wirkliche Lust hat, Animationen oder dynamische Interaktivität zu erstellen (was ich bei den ersten paar "reinen CSS"-Kommentatoren vermute), dann sollten Sie GSAP auf jeden Fall ausprobieren – ich garantiere Ihnen, Sie werden nicht zurückblicken.
Wenn Sie einige GSAP-Demos, Tutorials und Code (oft integriert mit Adobe Edge Animate) wünschen, besuchen Sie bitte meinen Blog oder mein CodeCanyon-Portfolio
Ich fand diesen Artikel wirklich ausgezeichnet und ziehe meinen Hut vor dem Autor!
Vor kurzem war ich super interessiert und eifrig, Animationen in meine Website einzubauen… Ich verwende derzeit Ember, um sie zu erstellen, was die Sache etwas kompliziert. Ich hatte viele Probleme mit Snap.svg und Ember und habe mich daher nach verschiedenen verfügbaren CSS- und Javascript-Optionen umgesehen…
Ich werde es auf jeden Fall ausprobieren, aber auch Ihr Text zum Link hier… oder Ihr Text zum Link hier… … Ich wünschte wirklich, ich könnte Snap.svg in Ember zum Laufen bringen und werde es bald wieder versuchen, aber bis dahin genügen vielleicht diese anderen Optionen. Nochmals vielen Dank für den sehr informativen Artikel.
Kann jemand eine starke UI-Animation zeigen, die mit Javascript/GSAP läuft, zum Beispiel ein starkes Off-Canvas-Menü (das den gesamten Bildschirm animiert) oder eine Fullscreen-Bild-3D-Animation, die mit GSAP reibungslos funktioniert? Besonders auf mobilen Geräten wie iPad/iPhone? Ich habe mit verschiedenen Lösungen experimentiert, und diese UI-Elemente sind extrem träge, besonders auf kleineren Geräten. CSS3 hilft hier, diese Menüs gut funktionieren zu lassen… Ich habe das noch nie richtig mit einer JS-Lösung gesehen.
Sicher, GSAP ist eine intelligente und schnelle JavaScript-Lösung, und wenn Sie mehr Kontrolle wünschen oder etwas animieren möchten, das mit CSS3 nicht möglich ist, ist es genau das Richtige. Ich sehe jedoch nicht, warum man im Jahr 2014 für UI-Elemente/Übergänge, mit denen die meisten Entwickler hauptsächlich zu tun haben, von CSS3 zu JS zurückkehren sollte.
Ein direkter Vergleich könnte hilfreich sein. Erstellen Sie zwei Projekte mit exakt denselben Elementen, um eine wahrheitsgetreue Darstellung der Leistung zu erhalten.
Toller Artikel, Jack! Ich habe GSAP bei einigen Projekten verwendet und kann mir nicht vorstellen, ähnliche Effekte mit der CSS3-Syntax zu erstellen.
Hier sind ein paar Beispiele – Apple Navigation, Apple Mac Navigation, Christmas Party Apology Maker.
Es dauerte eine Weile, bis ich mich an den Workflow gewöhnt hatte, aber nach ein paar Experimenten erkennt man wirklich die wahre Kraft von Greensock.
Ich werde GSAP definitiv bei komplexeren und interaktiveren Projekten einsetzen und CSS3 für einfache Dinge beibehalten.
Nun, ich schätze, ich bleibe vorerst bei JavaScript-Animationen. Ich hatte wirklich gehofft, CSS wäre eine bessere Lösung, aber die obigen Ergebnisse sprechen für sich.
Lieber Gastautor, obwohl einiges von dem, was Sie hier sagen, korrekt erscheint, bin ich der Meinung, dass Sie einige der Vergleiche, die Sie in diesem Artikel anstellen, nicht ziehen sollten. Es scheint, als würden Sie CSS-Animationen, -Transformationen und -Übergänge dafür verantwortlich machen, dass sie bestimmte Dinge nicht tun können, für die sie ursprünglich nicht gedacht waren, wie z. B. Elemente zieh- und/oder ablegbar zu machen, komplexe Berechnungen durchzuführen oder ihre eigene installierte Funktionalität zu erstellen oder zu ändern.
Abgesehen davon machen Sie ein paar Aussagen, die mir kühn falsch erscheinen. Zum Beispiel ist eine der ersten Dinge, die Sie oben feststellen, dass es unmöglich ist, verschiedene Transformationen mit unterschiedlichen Zeitpunkten für dasselbe Element gleichzeitig mit CSS anzuwenden. Ich habe mir die Zeit genommen, Ihnen ein gutes und einfaches Beispiel zu finden, wie dies tatsächlich sehr wohl möglich ist: http://animateyourhtml5.appspot.com/pres/index.html?lang=en#5
Die Tatsache, dass Ihre erste Aussage in diesem Artikel als unwahr erwiesen scheint, impliziert für mich, dass Ihre Recherche ein paar Schritte auf dem Weg übersprungen hat. Oder habe ich Ihre Worte irgendwie missverstanden?
Nichtsdestotrotz schätze ich die Zeit und Mühe, die Sie in diesen schönen und klaren Artikel investiert haben, sehr, und ich stimme Ihrer Schlussfolgerung zu, dass CSS nicht für alle oder zu viele Animationen gleichzeitig verwendet werden sollte. Obwohl ich als Antwort auf Ihre Bedenken hinsichtlich der Menge an CSS, die für komplexere Animationen benötigt wird, auch erwähnen möchte, dass Sie die benötigte CSS-Menge natürlich erheblich reduzieren könnten, indem Sie nur die für den jeweiligen Browser und Viewport benötigten Stylesheets importieren und zum Beispiel die 0%- und 100%-Keyframes nicht deklarieren, wenn dies nicht wirklich notwendig ist.
Meine abschließende Schlussfolgerung wäre, dass es keine gute Idee ist, Animationen, die mit JavaScript erstellt wurden, mit denen zu vergleichen, die mit CSS erstellt wurden, aber wenn Sie dies letztendlich tun möchten, sollten Sie versuchen, alle verschiedenen Möglichkeiten zu nutzen, um den gleichen Effekt in beiden Sprachen zu erzielen und dann alle zu vergleichen. Aber ich melde mich nicht freiwillig, tut mir leid.
Mit freundlichen Grüßen,
David Bartenstein
Ich denke, Sie missverstehen vielleicht den ersten Punkt, David. Ihr Beispiel zeigte überhaupt keine unabhängigen Transformationen. Beachten Sie, wie alle Transformationen (in diesem Fall Skalierung und Rotation) gleichzeitig animiert wurden? Versuchen Sie beispielsweise, eine Skalierungsanimation und eine Rotationsanimation zu staffeln (Skalierung beginnt, dann beginnt später die Rotation, beide überlappen sich teilweise und haben jeweils unterschiedliche Endzeiten und unterschiedliche Eases), wie in der von mir bereitgestellten Demo. Es ist unmöglich, dies mit CSS-Animationen am selben Element zu tun, doch ist es ein ziemlich häufiger Bedarf für moderne Animatoren, die mehr als einfache UI-Übergänge machen.
Was das „ziehbare“ Zeug betrifft, wollte ich nicht implizieren, dass CSS-Animationen die Technologie sein sollten, die das tatsächliche Ziehen und Ablegen antreibt (das wäre seltsam) – der Link zur ziehbaren Demo sollte lediglich eine Art animierte Bewegung zeigen, die _nach_ dem Schnippen/Werfen/Drehen des Objekts stattfindet und die mit CSS nicht gut repliziert werden kann (beachten Sie das sanfte Zurückschnappen, die Anwendung von Grenzen usw.). Der Punkt des Artikels war, den Leuten zu helfen, einige Arten von Animationen zu erkennen, die mit CSS nicht gut gemacht werden können. Ich habe einige Versuche der sanften Zurückschnappbewegung in CSS gesehen und es fühlte sich überhaupt nicht natürlich an.
Ich bin neugierig, warum Sie dachten, dass es eine schlechte Idee sei, CSS-basierte Animationen und JS-basierte Animationen zu vergleichen, angesichts der Tatsache, dass so viele Animatoren sich zwischen ihnen entscheiden müssen und oft Schwierigkeiten haben, den Hype zu durchschauen, herauszufinden, was möglich ist (und was nicht), und dann etwas zu bauen, das tatsächlich funktioniert und gut aussieht. Vielleicht bewegen wir uns einfach in verschiedenen Kreisen, aber ich kenne VIELE Leute, die in diesem Thema verwirrt und von CSS-Animationen frustriert sind.
Hallo Jack,
Ich schulde Ihnen eine Entschuldigung für meine eigenen falschen Aussagen. Nachdem ich verschiedene Dinge mit CSS-Transformationen ausprobiert habe, muss ich feststellen, dass das, was Sie gesagt haben, doch wahr war.
Es scheint, ich hatte falsche Erinnerungen daran, dass dies möglich war. Es ist mir nicht gelungen, unterschiedliche CSS-Transformationen mit individuellen Eases zu erstellen, ohne ein Wrapper-Element zu verwenden. (http://jsfiddle.net/DavidBartenstein/27DPG/37) Obwohl es ohne die personalisierten Eases mehr oder weniger machbar ist, die animierten Transformationen unabhängig voneinander wirken zu lassen.
Um den Rest Ihrer Antwort zu adressieren: Ich habe einige Ihrer Aussagen missverstanden, als Sie die "Snap Back"-Bewegung erwähnt haben.
Und was die Frage betrifft, ob ich es für eine schlechte Idee halte, CSS-Animationen mit anderen Arten zu vergleichen: Nachdem ich Ihre Argumente gelesen und überdacht habe, stimme ich Ihnen auch in dieser Hinsicht zu. Ich habe einfach das Gefühl, dass es allgemein bekannt ist, dass CSS nicht für komplexe Animationen verwendet werden sollte, und wenn jemand die beiden vergleichen würde, würde ich natürlich einen vollständigen Vergleich sehen wollen, der jede der Menschheit bekannte Methode verwendet :P Da es bei der Verwendung verschiedener Methoden leichte Leistungsunterschiede geben könnte, würde mich das interessieren.
Insgesamt jedoch: gute Arbeit an dem Artikel, und danke für Ihre würdevolle Antwort auf meine übereilten Schlussfolgerungen…
Mit freundlichen Grüßen,
David
Hallo Jack, bezüglich Ihrer Aussage, eine Animation zu skalieren und später mit einer Rotation zu überlappen. Ich dachte, das könnte mit CSS einfach erreicht werden?
In CSS mit Animations-Keyframes, können wir das nicht?
0% transform: scale(0) rotate(0deg)
40% transform: scale(0.5) rotate(0deg)
60% transform: scale(1) rotate (60deg)
100% transform: scale(0) rotate(0deg).
Würde das nicht "visuell" die Animation mit der Skalierung beginnen und sie dann auf halbem Weg drehen?
Übrigens, das ist ein großartiger Artikel.
Venn, bei sehr einfachen Dingen, ja, aber
Versuchen Sie, die Rotation mit einem anderen Ease zu verwenden als die Skalierung
Versuchen Sie, Interaktivität hinzuzufügen, z.B. das Element ständig zu drehen, aber die Skalierung nur bei Rollover/Rollout zu animieren
Stellen Sie sich vor, was für ein Albtraum der Workflow mit CSS wäre, wenn der Kunde sagt "Mach die Skalierung doppelt so lang (Dauer) und die Rotation soll eine halbe Sekunde früher beginnen". Schluck. Du müsstest die Mathematik machen und fast alle Prozentsätze durchweg aktualisieren (und die Dauern). Außerdem müsstest du viele Werte in den Transformationen duplizieren. Animation ist von Natur aus sehr experimentell, und der CSS-Workflow ist dafür überhaupt nicht förderlich. Siehe http://www.greensock.com/css-workflow/ für einen Artikel, der sich speziell mit Workflow-Herausforderungen befasst.
Versuchen Sie, relativ zu animieren, z.B. bei einem Klick die Rotation um 5 Grad mehr als den aktuellen Wert zu animieren (auch wenn sie mitten im Tween erneut angeklickt wird).
Ja, wenn Sie einen ausreichend einfachen Anwendungsfall haben, ist es möglich, es so aussehen zu lassen, als würden sich die Transformationskomponenten unabhängig voneinander animieren, aber es gibt einige ziemlich wichtige Vorbehalte, die man beachten sollte.
Ja, stimme Ihnen vollkommen zu.
Um die Sache noch schlimmer zu machen, kann die Animation komplexer Animationen in CSS ein Albtraum sein, wenn man kein professioneller SASS-Benutzer ist. Und man muss auch wirklich kreativ sein, wie man CSS verwendet.
Ich habe dieses wirklich komplizierte CSS-Experiment ausschließlich mit SASS + HAML erstellt. http://vimeo.com/84713704
Einige wichtige Erkenntnisse
1) Schwer zu synchronisieren. Wie Sie sagen, würde die Aktualisierung einer Dauer zu einem kaskadierenden Albtraum führen.
2) Die Art und Weise, wie Sie Ihren SASS-Code schreiben, ist fast identisch mit dem Schreiben von Javascript, bis zu einem Punkt, an dem Sie denken werden, dass es überflüssig ist, dies in CSS fortzusetzen.
3) Die verrückte CSS-Transform-Eigenschaft bei der Arbeit am 3D-Polygon. transform: scaleY(..) skewX(..) rotate(..) translateY(..) rotate(..) etc. Die Mathematik wird dich verrückt machen.
4) Zuletzt das generierte CSS, puh. Massive Dateigröße. Man könnte einfach eine Bibliothek verwenden.
Es war erst mein zweiter Tag mit Greensock, aber es sah schon wirklich vielversprechend aus.
Erstaunlicher Artikel, auf jeden Fall lesenswert.
Die Verwendung von CSS-Animationen für Dinge wie Übergänge, Hover-Effekte und ähnliches scheint intuitiver und einfacher zu verwalten zu sein.
Die Verwendung von CSS für komplexe Animationen ist jedoch ein Albtraum, ich bin mir nicht einmal sicher, wie es realistisch in der realen Welt angewendet werden könnte. Es ist gut zu wissen, dass es eine praktikable Alternative gibt
Ich denke, der beste Punkt, der hier gemacht wird, ist, dass die Debatte über CSS- vs. JS-Animationen viel zu lange als jQuery-Animationen vs. CSS wahrgenommen wurde. Es steckt viel mehr dahinter. Dieser Artikel hilft hoffentlich, die Dinge etwas auszugleichen.
Nichts hält dich davon ab, CSS-Animationen in JavaScript zu erstellen.
Dadurch können Sie alles tun, was Ihnen fehlt, wie zum Beispiel 30 Grad zu einer Rotation hinzufügen.
Leider bin ich ziemlich sicher, dass das nicht stimmt – man kann nicht „alles“ machen, indem man CSS-Animationen über JavaScript einrichtet, wie z. B. unabhängige Transformationen, Physik, Scrollposition, Animation entlang einer Bézierkurve, Verwendung von Eases wie Elastic und Bounce, flüssiges Suchen zu jedem Punkt oder Rückwärtslaufen während der Laufzeit (Laufzeitsteuerungen) und so ziemlich alles andere, was im Artikel erwähnt wird. Und was das einfache „30 Grad zur Rotation hinzufügen“ jederzeit betrifft, so ist das technisch mit JS+CSS möglich, aber ich würde gerne sehen, wie Sie persönlich das so robust angehen würden, um beispielsweise mitten in einem laufenden rotationX-Tween und während andere Teile der Transformation animiert werden (Skalierung und Verschiebung), einfach zu sagen „füge 30 Grad zum aktuellen rotationX-Wert hinzu“, und Bonuspunkte gibt es, wenn Sie es anweisen können, zu einem absoluten Rotationswert in der kürzesten Richtung zu gehen. :) Mein Punkt ist, dass selbst wenn diese eine Sache technisch mit JS+CSS machbar ist, es ziemlich umständlich ist, weil man wahrscheinlich eine 16-Elemente-Matrix parsen, die Rotation zusammen mit allen anderen transformationsbezogenen Werten berechnen und sie wieder zu einer Matrix oder Liste zusammensetzen müsste. Die meisten Animatoren hätten keine Ahnung (oder kein Interesse) daran, wie das geht, daher ist es nicht sehr praktisch (Workflow-Problem). Animatoren wollen frei spielen und experimentieren, und die Werkzeuge müssen das ermöglichen.
Ich habe eine ziemlich gute Lösung für das Timeline-Problem bei CSS-Animationen gefunden. Durch die Verwendung von JavaScript zum Auslösen und einer Schrittfunktion erhalten Sie das Beste aus beiden Welten. Außerdem ist es unglaublich einfach damit zu arbeiten. Ihr Text zum Link hier…
Ich möchte mich einfach nur für die Erstellung eines so fantastischen Toolsets bedanken. Sie haben mir über die Jahre so viel Zeit erspart.
Geht es hier nur um Animationen in Chrome/Webkit? Der Benchmark scheint in Firefox nicht gut und in IE11 überhaupt nicht zu funktionieren.
Funktioniert bei mir in allen gängigen Browsern, einschließlich IE11, hervorragend (gerade nochmals überprüft). Ich frage mich, ob Ihr Browser so eingestellt ist, dass er eine wirklich alte Version emuliert oder so etwas? Haben Sie auch versucht, direkt zum Codepen zu gehen (vielleicht war die Einbettung hier fehlerhaft)?
Um Ihre Frage zu beantworten, nein, dieser Artikel konzentrierte sich _nicht_ nur auf Webkit-Browser (ich habe in der Ergebnistabelle eine Reihe weiterer aufgeführt). Danke für die Bitte um Klärung.
Ich weiß nicht, was das Problem ist, aber ich habe es direkt in Codepen ausgeführt und es hat funktioniert. Dann habe ich es eingebettet ausgeführt und es hat auch funktioniert.
Können Sie erklären, warum GSAP sich so stark bewirbt und Testfälle wie "GSAP versus jQuery" verwendet, obwohl ihre Bibliothek eindeutig überall mit jQuery gespickt ist?
Nochmal, Entschuldigung, wenn der Artikel als selbstpromotional rüberkam. Ich habe versucht (und anscheinend versagt), dies zu vermeiden.
Um es klarzustellen, GSAP hängt _überhaupt_ nicht von jQuery ab. Es ist nicht "überall verstreut", aber wir verwenden es in den Codepen-Demos als Bequemlichkeit für die Auswahl von Elementen und einige andere kleinere Annehmlichkeiten (wie es heutzutage so üblich ist). Es wäre jedoch sehr einfach, dies zu eliminieren. GSAP ist abhängigkeitsfrei.
Zunächst einmal habe ich nicht gehört, dass GSAP eine weit verbreitete Bibliothek ist. Ich denke, ich werde sie in einigen Projekten verwenden. Ich arbeite derzeit an einer Website, für die der Kunde viel WOW-Faktor und Bewegung wünscht, ähnlich wie bei einigen DVD-Titelmenüs.
Zweitens, WOW… Ich bin absolut sprachlos, dass jemand diesen Beitrag als Eigenwerbung auffassen würde. Ich selbst habe in der Vergangenheit jQuery- und CSS-Animationen verwendet, aber nur für grundlegende Animationen. Wenn ich ein aufwendigeres oder komplexeres animationsbasiertes Projekt erstellen würde, kann ich deutlich erkennen, wo (in meinem Fall) GSAP eine bessere Option wäre.
Wenn Sie der Meinung sind, dass dieser Test voreingenommen ist, würden wir alle gerne IHREN Test sehen, der zeigt, wie es ist. Jack erklärt deutlich, dass CSS bei einigen Animationen ein klarer Gewinner ist und hat sehr gute Arbeit geleistet, indem er sich nicht selbst beworben hat. Hätte er ein Pseudonym verwendet, hätte niemand mit der Wimper gezuckt (meiner Meinung nach). Er stellt unserer Branche ein sehr nützliches Tool zur Verfügung, und er wird dafür kritisiert, dass er es auf einer anderen Website veröffentlicht? Großartige Arbeit, Leute… so helft ihr unserer Branche zu wachsen.
Meine 0,02 $… GSAP ist eine erstaunliche Bibliothek, und dieser Beitrag hat Licht auf Dinge geworfen, die ich über Animationsvergleiche nicht wusste.
Vielen Dank,
Patrick
Selbst wenn GSAP in diesem gut geschriebenen Artikel beworben wird, wo ist das Problem dabei? Es ist ein qualitativ hochwertiges Tool, das extrem gut unterstützt wird. Wenn wir das Internet-Erlebnis voranbringen wollen, was ist dann falsch daran, etwas zu bewerben, das offensichtlich gut durchdacht ist und von einer engagierten Person unterstützt wird?
Ich persönlich bin der Meinung, dass jeder, der einen Artikel schreibt und viel Zeit und Mühe in die Erklärung der Vor- und Nachteile investiert, einen gewissen Nutzen verdient. Ich denke auch, dass die Community vorsichtiger sein sollte, etwas zu verreißen, über das sie nur sehr wenig weiß, besonders wenn es die Kreation einer anderen Person ist. Vielleicht nehmen Sie sich etwas Zeit, um damit zu spielen, stellen dem Ersteller Fragen und behandeln ihn mit dem Respekt, den er für seine Bemühungen verdient.
Nach einer kurzen Überprüfung der GSAP-Bibliothek und der Geschichte von Greensock ist es meine persönliche Meinung, dass Jack echt ist und sein Beitrag zur Community gut angenommen werden sollte.
100% einverstanden
Großartige Lektüre.
Viele der fehlenden Funktionen in CSS sind in Arbeit. Pause, Seek etc. kommen in Web-Animationen
warte darauf, dass sie veröffentlicht werden…. liebe css mehr als js..
GSAP rockt tatsächlich. Dieser Artikel scheint viele Mythen über Jquery/CSS-Animatoren zu entlarven. Hut ab!
Ich denke, viele Leute, die sich darüber beschweren, dass dieser Artikel eine Werbung sei, missverstehen den Sinn des Artikels. Ich sehe es eher so, dass die Web-Community auf ihre Optionen bei Web-Animationen aufmerksam gemacht wird.
Als jemand mit Hintergrund in Computeranimation und traditioneller Animation war ich sehr zufrieden mit GSAP AS/AS3 für Flash. Ich bin froh, dass Jack GSAP nach JS portiert hat. Ich finde CSS-Animationen und @keyframes sehr frustrierend und begrenzt. Wenn man eine Änderung an seinen Keyframes und dem Timing mit auch nur einer geringfügigen Änderung vornehmen muss, steht man vor dem Albtraum, das Timing neu berechnen zu müssen. Außerdem muss man dieselben Regeln für Cross-Browser schreiben. Bei Animationen dreht sich alles um das Timing… und CSS-Animationen sind noch nicht so weit, wenn es um die volle Kontrolle geht.
GSAP ist die einzige Animationsplattform, die mir die volle Kontrolle über ernsthafte einfache und komplexe Animationen mit einer virtuellen Timeline ermöglichte. Wenn Sie sich die Zeit nehmen, Ihre eigenen Tests durchzuführen, werden Sie selbst sehen, wie GSAP dazu beiträgt, komplexe Aufgaben zu vereinfachen.
Natürlich hält niemanden davon ab, sowohl CSS-Animationen als auch JS-Animationen in seinem Workflow zu verwenden. Aber wenn Sie ständig Termine einhalten müssen und eine genaue Kontrolle über Ihre Animation benötigen, dann würde ich GSAP ausprobieren und Ihre eigenen Tests durchführen. Es spart mir so viel Zeit, ohne den Ärger der mangelnden Kontrolle und Timeline von CSS-Animationen.
Nur meine Meinung… Testen Sie es selbst :)
Ich bin ein ganz normaler Webentwickler, der nicht aus der AS3-Welt kommt.
Als ich zum ersten Mal von GSAP hörte, war es von ehemaligen Flash-Entwicklern, die Schwierigkeiten beim Übergang zu HTML hatten und GSAP für sehr grundlegende Dinge verwendeten.
Also dachte ich, es sei eine dumme Bibliothek, mit einer bescheuerten Syntax, einer schlechten Dokumentation und ohne Follow-up.
Und vor ein paar Monaten hatte ich ein großes Projekt mit vielen Animationen. Keine grundlegenden Dinge. Komplexe Animationen, 2D und 3D, mit Rücklaufmodus, Geschwindigkeitsmodi usw.
Ich habe GSAP ausprobiert.
Es ist fantastisch.
Nicht die Syntax. Nicht die Doku.
Aber, Mann, Funktionalitäten und Performance und Fehlerfreiheit… Fantastisch.
Wenn Sie dies für einen Slider verwenden, sind Sie ein fauler Idiot. Aber wenn Sie schwere Animationen haben, ist es ein verdammter Lebensretter.
Ich habe CSS-Animationen immer JavaScript vorgezogen, aber je mehr ich darüber nachdenke, desto mehr wird mir klar, dass ich einfach den "leichten Weg" gegangen bin (zumindest was die Arbeit betrifft). Wie im Artikel dargelegt, sind CSS-Animationen nicht einmal so einfach zu realisieren, und einige Dinge sind einfach unmöglich. Ich denke, meine Zurückhaltung, mich JavaScript zuzuwenden, lag daran, dass Kunden sagten, wie sehr sie es nicht wollten, obwohl sie trotzdem dies und das wollten. Während ich mich in der Vergangenheit JavaScript zugewandt habe, wenn ich musste, werde ich es von nun an sicherlich öfter tun.
Die obigen Kommentare sind voller Argumente für oder gegen JavaScript-Animationen, aber lassen Sie uns hier für einen Moment praktisch sein.
Können Sie sich vorstellen, so etwas wie 24hoursofhappy.com nur mit CSS-Animationen zu erstellen?
Dieser Beitrag ist eine totale Überraschung, im positiven Sinne, aber irgendwie ähnelt er den meisten Entdeckungsshows, wo alle Fakten dich auf Trab halten, aber mit einem großen Fragezeichen enden. Letztendlich bin ich mir nicht sicher, ob ich mich mehr um CSS oder JavaScript kümmern sollte, weil ich immer noch davon überzeugt bin, dass jedes seine eigenen Vorzüge hat.
Ich habe alle Kommentare nach einer Lösung durchgelesen, aber alles scheint wie in alten Zeiten mit den Apple-Windows-, Flash-Javascript-, Corel-Illustrator-Kämpfen zu sein. Nichts Kreatives und das hasse ich wirklich.
Gehen wir mal kurz ins Geek-Land. Aquaman gegen Spiderman. Wo? Im Wohnzimmer oder im Badezimmer?
Ich sehe Seiten, die um das GSAP-Skript herum aufgebaut sind, nur um fast jeden Effekt auszunutzen, obwohl dies eigentlich ein Werkzeug sein sollte, um Ihr Design zu verfeinern. Es ist so gut, dass es gefährlich ist.
Als Fan von Greensock aus den guten alten Flash-Tagen denke ich, dass viele Leute den Punkt verpassen. Aus Entwickler-/Designer-Sicht ist es sinnvoll, die GPU Grafiken rendern und cachen zu lassen. Andererseits kommt Javascript ins Spiel, indem es die CPU für komplexe Berechnungen in Kombination mit der GPU nutzt, ich meine, allein das wird die Leistung steigern. Jedes Tool hat jedoch seine Stärken und Schwächen, CSS und Javascript. Ich würde Javascript nicht zum Designen (Präsentationsschicht) einer Seite verwenden, und ich würde CSS sicherlich nicht für Interaktionen und komplexe Berechnungen verwenden. Eine Sache, die ich nicht mag, ist, wenn alle Arten von Entwicklern/Designern über einen bestimmten Fall streiten, in dem sie keine Erfahrung haben oder nicht recherchiert haben. Ich denke, das ist das Problem der gesamten Web-Community, zu viele Meinungen und nicht genügend Fakten, was Jack mit Tests definitiv bewiesen hat. HABT EINFACH SPASS, LEUTE!!! WOW. Übrigens Jack, ich übe manchmal immer noch in Flash Greensock Flash Animation. Ich liebe Greensock
Viele sehr intelligente Leute haben hier Kommentare abgegeben … Es ist schön, sie zu lesen und zu sehen, wie andere Entwickler die Dinge sehen … Ich bin Adobe-zertifiziert in Flash und habe, WIE DIE MEISTEN VON UNS, jetzt weitergemacht und mache HTML5-UI-Design usw. … Ich habe tiefe Erfahrung mit Greensock-Bibliotheken in Flash und habe auch die JS-Versionen verwendet … Ich möchte Jack nur sagen, dass er ein überragender Entwickler und Denker im Bereich der Animation ist … Vertrauen Sie dem, was er sagt … Wir haben seine Tools bei Sony Studios, Charles Schwab Creative und anderen Orten, an denen ich gearbeitet habe, angenommen … Für mich hat Animationssteuerung meiner Meinung nach von vornherein nichts in CSS-Code zu suchen … Nur meine Meinung … Es ist für Styling gedacht … JS ist viel besser geeignet, um Animationen zu steuern … Ich will eine API / altmodisch bin ich … Und GSAP rockt das Haus, kein Zweifel … Jack, du bist ein erstaunlicher Typ … Und ich habe in dem Artikel keine Voreingenommenheit gehört … Ich habe dich als fair und objektiv empfunden … Ich denke, die meisten dieser Leser auch … Du bist der Mann …