Während das Animieren von SVG mit CSS einfach und bequem ist, kann CSS nicht alle möglichen SVG-Eigenschaften animieren. Zum Beispiel können alle Eigenschaften, die die *tatsächliche Form* der Elemente definieren, nicht in CSS geändert oder animiert werden. Sie können sie jedoch durch SMIL animieren. Sara Soueidan behandelt dies in ihrem Leitfaden zu SMIL hier auf CSS-Tricks, aber ich dachte, ich würde diese besondere Fähigkeit beleuchten.
Wichtigster Fakt: Die Formen müssen die gleiche Anzahl von Punkten haben
Andernfalls schlägt die Animation einfach fehl. Die Form verschwindet nicht oder so, aber sie wird nicht animiert.
Es ist nicht offensichtlich, wie viele Punkte eine Form hat, nur durch Betrachten des d (im Falle eines path) oder des points-Attributs (im Falle eines Polygons). Sie müssen also vielleicht einfach in einem Vektoreditor-Programm mit einer einzelnen Form beginnen und von dort aus arbeiten.
1. Beginnen Sie mit der kompliziertesten Form
In dieser Demo werde ich von einem Stern zu einem Häkchen morphen. Der Stern ist komplexer

Speichern Sie eine Kopie dieser SVG, dann erstellen Sie eine neue Kopie für die nächste Form.
2. Erstellen Sie die nächste Form mit denselben Punkten.
Ziehen Sie die Punkte herum, bis Sie Ihre nächste Form haben.


3. Verwenden Sie die Startform auf dem SVG-Formelement selbst
<svg viewBox="0 0 194.6 185.1">
<polygon fill="#FFD41D" points=" ... shape 1 points ... ">
</polygon>
</svg>
4. Fügen Sie ein Animationselement hinzu, das zur nächsten Form animiert
<svg viewBox="0 0 194.6 185.1">
<polygon fill="#FFD41D" points=" ... shape 1 points ... ">
<animate attributeName="points" dur="500ms" to=" ... shape 2 points ... " />
</polygon>
</svg>
Diese Animation wird sofort ausgeführt, also müssen wir das etwas korrigieren.
5. Lösen Sie die Animationen nach Bedarf aus
SMIL kann Interaktionen wie Klicks und Hover verarbeiten, solange alles innerhalb der SVG selbst stattfindet. Zum Beispiel könnten Sie die Animation starten, wenn sie angeklickt wird, wie z.B.
<polygon id="shape" points=" ... shape 1 points ... ">
<animate begin="shape.click" attributeName="points" dur="500ms" to=" ... shape 2 points ... />
</polygon>
Das ist ziemlich nett, aber es ist etwas einschränkend, da Sie nur Klicks von anderen Elementen innerhalb derselben SVG verarbeiten können. Vielleicht ist diese SVG nur ein Teil eines <button> und Sie möchten die Animation bei jedem Klick auf diesen Button ausführen.
Geben Sie der Animation zuerst eine ID, damit wir sie mit JavaScript finden können, und verhindern Sie dann, dass sie ausgeführt wird mit
<animate id="animation-to-check" begin="indefinite" ... />
Jetzt können Sie eine Referenz auf diese Animation erhalten und sie nach Belieben starten
animationToCheck = document.getElementById("animation-to-check");
// run this on a click or whenever you want
animationToCheck.beginElement();
Demo
Diese Demo hat tatsächlich vier Animationen. Eine zum Morphen des Sterns zu einem Häkchen, eine zum Ändern der Farbe und dann beide gleichen Animationen in umgekehrter Richtung. Das Klicken auf den Button prüft den Zustand des Buttons und führt dann die entsprechenden Animationen aus.
Sehen Sie den Pen Shape Morph Button von Chris Coyier (@chriscoyier) auf CodePen.
Wäre ziemlich cool für Diagramme, wie dieses alte Raphael-Demo

Yup und Sie können die gleiche Technik für Formen verwenden, die aus HTML-Elementen mit der
polygon-Funktionswert fürclip-pathausgeschnitten sind – Demo, ändern Sie$n1und$n2im SCSS, um die Anzahl der Ecken der Polygone zu ändern, zwischen denen Sie wechseln. http://codepen.io/thebabydino/pen/aFrcu (derzeit nur WebKit, plus ein seltsamer Bug, der auftritt, wenn ein durchgehender Hintergrund vorhanden ist und ich auchtransformauf dem geklippten Element animiere)Ich habe diese Technik auch verwendet, um die Illusion einer "atmenden Form" zu erzeugen, die von einem n-zackigen Stern zu einem n-Polygon übergeht. http://codepen.io/thebabydino/pen/Fxrbd (wiederum derzeit nur WebKit, da IE keine Unterstützung für Clipping und Masking hat und Firefox keine Funktionswerte für Formen für
clip-pathunterstützt)Ich mag es! Wäre es möglich, zuerst von dem Stern zu einer Zwischenform zu morphen und dann zum Häkchen? So wie es ist, erinnert es mich an frühe 90er-Jahre-Tweening. Eine Form in der Mitte (und vielleicht ein wenig "hüpfende" Easing?) — etwas wie ein Kreis oder ein Diamant oder etwas Ähnliches — könnte ein flüssigeres visuelles Ergebnis liefern.
Absolut! Sie können so viele Keyframes hinzufügen, wie Sie benötigen, und der Browser ermittelt die Tweens. Sie können die Keyframes auch über die Dauer timen, sodass Sie Pausen zu bestimmten Zeiten erstellen können.
Der Schlüssel ist, dass jede Form die gleiche Anzahl von Punkten – oder Eckpunkten – haben muss. Das Erstellen und Ausrichten dieser Punkte für die gewünschte Animation ist die eigentliche Kunst dieser Technik.
Schauen Sie sich meinen Beitrag für weitere Informationen an: Eine Einführung in SVG-Animation mit SMIL.
Oder Sie könnten ein Flash-Shape-Tween verwenden und eine SVG-Sequenz exportieren, diese in Webframes importieren und eine einzelne SVG-Datei mit CSS-Animationen exportieren. Das würde jeden Browser treffen.
Ah, so cool. Animationen lassen Interfaces viel freundlicher wirken, und dies ist eine leistungsstarke Ergänzung zu den "typischen" Animationen, die Designer auf Websites einsetzen. Danke für den Artikel, Chris!
OMG, es ist ganz einfach. Vor ein paar Tagen, als ich nach SVG-Icons recherchierte, fand ich ein paar Icons mit großartigen Animationen, aber sie waren ziemlich schwierig, aber diese Lösung ist ziemlich einfach.
Abgesehen von der Beschränkung, nur die Punkte zu ändern, funktioniert diese für viele Anwendungen.
Ich mag es! Wäre es möglich, zuerst von dem Stern zu einer Zwischenform zu morphen und dann zum Häkchen? So wie es ist, erinnert es mich an frühe 90er-Jahre-Tweening. Eine Form in der Mitte (und vielleicht ein wenig "hüpfende" Easing?) — etwas wie ein Kreis oder ein Diamant oder etwas Ähnliches — könnte ein flüssigeres visuelles Ergebnis liefern.
Ich mag es… einfach OMG.. danke
Der Schlüssel ist, dass jede Form die gleiche Anzahl von Punkten – oder Eckpunkten – haben muss. Das Erstellen und Ausrichten dieser Punkte für die gewünschte Animation ist die eigentliche Kunst dieser Technik.