jQuery animate
Neben den einfachen Effekten wie hide / show, fading und sliding gibt es die Kategorie Custom unter den jQuery-Effekten. Die Animation-Funktion ist die Basis für eigene Effekte.
width, height, opacity, margin sind Eigenschaften mit einem numerischen Wert – position: relative hingegen ist eine keine Eigenschaft mit einem numerischen Wert.
Die Syntax für Animationen ist
"swing" / "linear" ─────┐
│
▼
animate (Eigenschaft, Dauer, Easing, Complete)
▲ ▲
│ │
│ Callback bei Ablauf
Vorgabe: 400ms ───┘
"slow" / "fast"
Gefordert ist nur das Objekt Eigenschaft in der Form {eigenschaft: "wert"}.
Sequentielle Animationen
Der einfachste Ansatz ist der Aufruf von jQuery animate() mit dem Element, das animiert werden soll.
<div id="aniDiv">Und ab die Post</div> <div class="centerbuttons"> <button id="right">Box vergrößern</button> <button id="text">Text animieren</button> <button id="colo">Transparenz</button><br> <button id="reset">Reset</button> </div>
$("#right").click (function () {
$("#aniDiv").animate ( { width: "500px"}, 1000);
});
$("#text").click (function () {
$("#aniDiv").animate ( { fontSize: "2rem"}, 1000);
});
$("#colo").click (function () {
$("#aniDiv").animate ( { opacity: "0.5"}, 1000, "swing");
});
$("#reset").click (function () {
$("#aniDiv").animate ( { width: "250px"}, 200);
$("#aniDiv").animate ( { fontSize: "1.2rem"}, 200);
$("#aniDiv").animate ( { opacity: "1"}, 200);
});
Auch wenn die Buttons für die einzelnen Effekte schnell nacheinandern geklickt würden, würden die Effekte sequentiell – einer nach dem anderen – ablaufen.
Animate Chaining – Animationen verketten
Um mehrere Eigenschaften eines Elements gleichzeitig zu animieren, bildet animate() eine Kette (chaining).
$("#all").click (function () {
$("#aniBox").animate ( {
width: "500",
fontSize: "32",
opacity: "0.5"
}, 1000, "swing");
});
$("#resetAll").click (function () {
$("#aniBox").animate ( {
width: "250",
fontSize: "1.2rem",
opacity: "1"
}, 500, "swing");
})
Die Werte der Eigenschaften werden als px interpretiert, wenn keine Maßeinheiten angegeben werden. Alternativen sind z.B. Angaben in % oder rem.
Dabei nicht vergessen: jQuery animiert nur Eigenschaften mit numerischen Werten. Schon color: #4723ab wird erst animert, wenn jQuery UI ebenfalls installiert ist.
jQuery Callback-Funktionen und Loops
$("element").animate(
{"Eigenschaft": "Wert"},
Dauer,
Geschwindigkeit,
callbackFunction);
Alle Animations-Methoden von jQuery bieten eine Callback-Funktion als optionales Argument nach der Dauer bzw. Geschwindigkeit. Die Callback-Funktionen wird ausgeführt, sobald der Effekt beendet ist, und kann auch weitere Animationen starten, so dass eine Sequenz oder Kette von Animationen entsteht.
.simple {position: relative; overflow: hidden; }
.square { position: absolute; bottom: -200px; }
function loop() { $('.square').animate ( {bottom: "200px"}, // Eigenschaft 4000, // Dauer 'swing', // Geschwindigkeit function() { // Callback loop() } ); $('.square').css({bottom: "-200px"}); // zurück in den Anfangszustand } loop();
In diesem Beispiel ruft die Callback-Funktion sich selber auf, so dass die jQuery-Animation in einem Loop – einer Schleife – abläuft.
jQuery Easing für Animationen
Die Easing-Funktionen steuern die Geschwindigkeit über die Dauer der Animation. Von Haus aus kommt jQuery mit zwei Easing-Funktionen: linear (zu jedem Zeitpunkt gleich schnell) und swing (start und endet langsamer).
Für weitere Easing-Effekte in jQuery muss jQuery UI für Effekte (Effects Core) eingebunden werden.
function loopease() {
$('.square2').animate (
{bottom: "220px"},
{ duration: 3000,
easing: 'easeOutBounce',
complete: function () {
loopease();
}
});
$('.square2').css({bottom: "-200px"});
}
loopease();
jQuery Animation Chain
Die einfachen Animations-Effekte in jQuery sind oft Teil einer komplexeren Kette.
- Aneinanderhängen von Methoden (method chaining): object.method1().method2().method3()
- Mittels Callback-Funktionen, die am Ende eines Effekts ausgeführt werden
- Die Methode queue() bildet eine weitere Möglichkeit, Animationen in einer Kettenreaktion durchzuführen.
Dafür hat jQuery Methoden zur Steuerung des Ablaufs.
- delay()
- dequeue()
- finish()
- queue()
- stop()