Abschnitt 3
Animationen
Drei Arten von Animationen
Im modernen Web ist fast alles irgendwie animiert, und das wollen wir hier auch erreichen. Animationen mit SVG können sehr komplex werden, aber man kann damit auch sehr schöne Dinge darstellen. Wir beschäftigen uns nur mit den Grundlagen. Man kann damit aber auch schon komplexe Animationen erstellen.
Bemerkung
Im gedruckten Skript kann von einer Animation nur ein starres Bild stehen. Auf dieser Seite laufen alle Animationen wirklich: Was Sie in den Vorschauen sehen, ist dieselbe SVG-Datei, die auch im Listing daneben steht — Ihr Browser spielt sie ab. Wenn eine Animation nur einmal läuft und schon fertig ist, wenn Sie hinschauen, laden Sie die Seite einfach neu.
Genauer schauen wir uns die folgenden drei Arten von SVG-Animationen an.
Verformung
Indem wir gewisse Werte kontinuierlich verändern, erhalten wir eine
Animation. Dafür setzen wir ein
<animate>-Tag ein.
Beispiel
Hinweis
Beachten Sie, dass wir hier das
<ellipse>-Tag nicht selbstschliessend schreiben und
darin das <animate>-Tag einsetzen.
Bewegung
Mit Hilfe des <animateMotion>-Tags lassen sich
Objekte entlang eines Pfades bewegen.
Beispiel
Der Pfad, dem gefolgt werden soll, wird hier nicht direkt angegeben,
sondern mit einem <mpath>-Tag über seine ID
referenziert. Alternativ kann man ihn dem
<animateMotion>-Tag auch direkt im Attribut
path mitgeben.
Transformation
Das <animateTransform>-Tag animiert die
Transformationen aus Abschnitt 2. Im
Attribut type geben wir an, welche:
translate, rotate oder scale.
Beispiel
scale ihn von der Mitte aus.
Der Ablauf einer Animation
Allen drei Tags sind die Attribute gemeinsam, mit denen wir den Ablauf der Animation steuern:
attributeName-
Welches Attribut verändert werden soll, zum Beispiel
cxoderry. Bei einer animierten Transformation ist es immertransform. fromundto- Der Wert am Anfang und derjenige am Ende der Animation.
values-
Eine ganze Liste von Werten, mit Semikolon getrennt, die der Reihe
nach durchlaufen werden. Damit können wir eine Animation auch wieder
zum Anfang zurückführen, wie etwa
values="50;20;50". dur-
Die Dauer eines Durchlaufs, zum Beispiel
2sfür zwei Sekunden oder500msfür eine halbe Sekunde. begin-
Wann die Animation startet. Standardmässig sofort, mit
begin="1s"eine Sekunde später. repeatCount-
Wie oft die Animation läuft. Mit
indefiniteläuft sie endlos. fill-
Was nach dem letzten Durchlauf passiert. Mit
freezebleibt der Endwert stehen, mitremove(Standard) springt die Form in den Ausgangszustand zurück. Verwechseln Sie diesesfillnicht mit der Füllfarbe — hier steht es an einem<animate>-Tag und nicht an einer Form.
Beispiel
Bemerkung
Animationen lassen sich auch mit CSS erzeugen, und für Webseiten ist das oft der bequemere Weg. Der Vorteil der hier gezeigten Variante ist, dass die Animation in der Bilddatei selbst steckt: Die Datei animiert sich auch dann, wenn sie ganz ohne Webseite geöffnet wird.
Zum Nachschlagen
SVG-Animationen haben mehr Attribute, als wir hier zeigen können. Diese zwei Adressen genügen für alles, was in den Übungen vorkommt:
Übungen
Erstellen Sie einen animierten Smiley, der Ihnen mit einem Auge zuzwinkert.
Lösungsvorschlag
Lassen Sie einen Ball endlos zwischen einem Boden und einem oberen Punkt hin und her hüpfen.
Hinweis
Mit from und to allein springt der Ball
am Ende zurück. Nutzen Sie stattdessen values.
Lösungsvorschlag
Erstellen Sie einen Fortschrittsbalken, der sich in vier Sekunden einmal von leer bis voll füllt und dann voll bleibt.
Hinweis
Animieren Sie die Breite eines Rechtecks. Dass der Balken am Ende
stehen bleibt, erreichen Sie mit einem geeigneten Attribut am
<animate>-Tag.
Lösungsvorschlag
Erstellen Sie eine Ladeanimation: einen Kreisbogen, der sich endlos um einen blassen Ring dreht.
Hinweis
Sie brauchen keinen Bogen zu berechnen. Ein Kreis mit einer
passenden stroke-dasharray zeigt nur ein Stück seines
Randes. Der Umfang eines Kreises mit Radius 35 ist
2π · 35 ≈ 220.
Lösungsvorschlag
Lassen Sie den Text «Gymnasium Muttenz» entlang einer «Wellenkurve» hin und her animieren.
Hinweis
Nutzen Sie «text-anchor="middle"» und
«rotate="auto"» jeweils an einer geeigneten Stelle.
Was bewirken diese Optionen?
Lösungsvorschlag
Erstellen Sie ein rotes Quadrat, welches rotiert.
Hinweis
Lesen Sie unter
animateTransform (SelfHTML)
etwas über das Tag
<animateTransform>. Achten Sie darauf, wo der
Drehpunkt Ihres Quadrates liegt.