JavaScript/DOM/Element/animate
Die element.animate() Methode ermöglicht es, mithilfe der Web Animations API Elemente mit JavaScript zu animieren. Dabei werden CSS-Eigenschaften eingebunden, deren Werte dann dynamisch verändert werden.
Inhaltsverzeichnis
Syntax
element.animate(keyframes, options);
Folgende Parameter sind nötig:
keyframes: enthält CSS-Eigenschaften und deren Werte in eineroptions: entweder eine Zeitangabe in Millisekunden oder ein Objekt, das Zeitangabe, Timing Options und weitere Optionen enthältid: (optionale) Zeichenkette mit einer idcomposite: (optionale) Angabe, wie mit Werten aus anderen Animation zu verfahren istdelay: Verzögerung des Ausführungsbeginnsdirection: Richtungeasing: Beschleunigungskurven der AnimationendDelay: Verzögerung am Ende der Animationfill: Ansicht nach Ablauf der Animationiterations: Anzahl der WiederholungeniterationStart: Startpunkt der AusführungiterationComposite:spacing: Verteilung der Keyframes
Objektschreibweise
In dieser Variante enthält ein Objekt Schlüssel-Wert-Paare der zu animierenden CSS-Eigenschaft(en) und ihrer Werte:
element.animate({
transform: ["translate( 0px)", "translate(100px)", "translate( 0px)"],
color: ["black", "red" , "black"]
}, (1000));
Array von Objekten
In dieser Variante wird ein Array von Objekten aus CSS-Eigenschaften und ihren Werten verwendet:
element.animate([
{transform: 'translate( 0px)', color: 'black'},
{transform: 'translate(100px)', color: 'red'},
{transform: 'translate( 0px)', color: 'black'},
], {
duration: 1000, // Zeit in Ms,
iterations: Infinity, // Wiederholungen (hier unendlich)
delay: 300 // Verzögerung
});
Optionen
composite
Die composite-Eigenschaft ist eine optionale Angabe, wie mit Werten aus anderen Animation zu verfahren ist
-
replace: Standardwert, bisherige Werte werden überschrieben -
add: Werte werden zusammengefasst und nacheinander ausgeführt
translate(100px)undrotate(50deg) →translate(100px) rotate(50deg)
accumulate: Werte werden zusammengefasst
translate(100px)undtranslate(50px)→translate(150px), nichttranslate(100px) translate(50px)
direction
Die direction-Eigenschaft gibt die Richtung des Animationsverlaufs an.
-
'normal': Standardwert 'reverse': rückwärts,'alternate': ändert (wie ein Pendel) nach jeder Animation die Richtung,'alternate-reverse': dito, nur umgekehrt
delay
Die delay-Eigenschaft legt eine Verzögerung am Beginn der Animation fest. (Siehe auch die CSS-Eigenschaft animation-delay)
Sie erwartet eine Zeitangabe in ms (Standardwert = 0).
endDelay
Die endDelay-Eigenschaft legt eine Verzögerung am Ende der Animation fest.
Sie erwartet eine Zeitangabe in ms (Standardwert = 0).
duration
Die duration-Eigenschaft legt die Dauer der Animation in Millisekunden fest.
easing
Mit der easing-Eigenschaft können Sie Beschleunigungskurven der Animation definieren.
linear: ( Standardwert) Übergang mit gleicher Geschwindigkeit vom Start bis zum Stop
- (⇔ cubic-bezier(0,0,1,1))
ease: Übergang mit langsamen Start, beschleunigt und endet langsam
- (⇔ cubic-bezier(0.25,0.1,0.25,1))
ease-in: Übergang mit einem langsamen Start
- (⇔ cubic-bezier(0.42,0,1,1))
ease-out: Übergang mit einem langsamen Ende
- (⇔cubic-bezier(0,0,0.58,1))
ease-in-out: Übergang mit einem langsamen Start und Ende
- (⇔ cubic-bezier(0.42,0,0.58,1))
Zahlenangabe: Zahlenangabe einer Bézier-Kurve
- z.B.
cubic-bezier(0.42, 0, 0.58, 1)
-
steps(<integer>): lässt die Animation in mehreren Schritten springen; vgl. Ticken einer Uhr
- Die
easing-Eigenschaft entspricht der CSS-Eigenschaft animation-timing-function. - Dort finden Sie auch ein Beispiel, was die Unterschiede zwischen den Beschleunigungsfunktionen verdeutlicht.
- Jedoch hat
easingim Unterschied zuranimation-timing-functionden Standardwertlinearanstelle vonease.
- MDN: EffectTiming.easing
- Daniel Wilson: Jumps: The New Steps() in Web Animation
fill
Die fill-Eigenschaft legt die Darstellung nach Ablauf der Animation fest.
none: (Standardwert), Auswirkungen der Animation sind nur während des Ablaufs sichtbar, nicht jedoch nach Ablauf oder während einer Pauseforwards: das Ergebnis der Animation soll nach deren Ablauf weiterhin angezeigt werden.backwards: animiertes Objekt springt auf den Ausgangspunkt zurückboth: kombiniert die Auswirkungen vonforwardsundbackwardsund richtet sich nach dem aktuellen Zustand vor Beendigung der Animation
iterations
Die iterations-Eigenschaft legt die Anzahl der Wiederholungen fest.
Zahlenangabe: Standardwert 0, d. h. Animation wird einmal ausgeführtInfinity: (Unendlichkeit), ununterbrochen fortlaufende Animation
'infinite' festgelget wird, verwendet die API die Eigenschaft iterations und das Schlüsselwort Infinity, dass ohne Anführungszeichen notiert wird.iterationStart
Die iterationStart-Eigenschaft legt fest, an welcher Stelle und bei welchem Durchlauf die Animation startet.
Sie erwartet eine Zahlenangabe einer Dezimal- oder ganzen Zahl größer oder gleich 0 (Standardwert =0)
iterationsComposite
iterationComposite:
replace: Standardwert, bisherige Werte werden überschriebenaccumulate: Werte werden zusammengefasst
spacing
Mit der spacing-Eigenschaft können Sie festlegen, wie die einzelnen keyframes über die Dauer der Animation verteilt werden.
distribute: Standardwert, keyframes werden gleichmäßig über Animationsdauer verteiltpaced: keyframes werden anhand ihrer Werte so verteilt, dass größere Wertunterschiede die Keyframes weiter auseinanderziehen.
Anwendungsbeispiel
var kreis = document.getElementById('kreis');
kreis.onmouseover = function () {
kreis.animate([{
transform: 'translate( 0px)' + 'scale(1.0)',
background: '#dfac20'
}, {
transform: 'translate(100px)' + 'scale(1.5)',
background: 'red'
}, {
transform: 'translate( 0px)' + 'scale(1.0)',
background: 'black'
}
], {
duration: 1000,
iterations: 10
});
};
In diesem Beispiel wird die Animation mit einem mouseover ausgelöst. Der Kreis wird in zwei CSS-Eigenschaften animiert. Einerseits wird er mit transform: translate() verschoben; zusätzlich wird der Hintergrund unterschiedlich gefärbt. Die Animation dauert eine Sekunde und wird 10mal wiederholt.
Siehe auch
Weblinks
- W3C: 5.14. The Animatable interface
- MDN: Element.animate()
- birtles.github.io: Are we animated yet? – Übersicht über Firefox-Implementation der Web Animations API
- drweb: Demnächst auf Ihrem Bildschirm: CSS3-Animations mit der neuen JavaScript-Methode animate()
- html5rocks: Simplified Concepts in Web Animations Naming (Umbenennungen der einzelnen Methoden!)
- html5rocks: Web Animations - element.animate() is now in Chrome 36