GSAP
Kern-Tween-Methoden
- gsap.to(targets, vars) — animiert vom aktuellen Zustand zu
vars. Am häufigsten verwendet. - gsap.from(targets, vars) — animiert von
varszum aktuellen Zustand (Eingänge). - gsap.fromTo(targets, fromVars, toVars) — expliziter Start- und Endzustand.
- gsap.set(targets, vars) — wendet sofort an (Dauer 0).
Verwende immer camelCase-Eigenschaftsnamen (z.B. backgroundColor, rotationX).
Häufige Variablen
- duration — Sekunden (Standard 0.5).
- delay — Sekunden vor Start.
- ease —
"power1.out"(Standard),"power3.inOut","back.out(1.7)","elastic.out(1, 0.3)","none". - stagger — Zahl
0.1oder Objekt:{ amount: 0.3, from: "center" },{ each: 0.1, from: "random" }. - overwrite —
false(Standard),trueoder"auto". - repeat — Zahl oder
-1für unendlich. yoyo — wechselt die Richtung bei Wiederholung. - onComplete, onStart, onUpdate — Callbacks.
- immediateRender — Standard
truefür from()/fromTo(). Setze auffalsebei späteren Tweens, die dieselbe Eigenschaft+Element ansprechen, um Überschreiben zu vermeiden.
Transforms und CSS
Bevorzuge GSAPs Transform-Aliasnamen gegenüber rohem transform-String:
| GSAP-Eigenschaft | Entsprechung |
|---|---|
x, y, z | translateX/Y/Z (px) |
xPercent, yPercent | translateX/Y in % |
scale, scaleX, scaleY | scale |
rotation | rotate (deg) |
rotationX, rotationY | 3D-Rotation |
skewX, skewY | skew |
transformOrigin | transform-origin |
- autoAlpha — bevorzuge statt
opacity. Bei 0: setzt zusätzlichvisibility: hidden. - CSS-Variablen —
"--hue": 180. - svgOrigin (nur SVG) — Ursprung im globalen SVG-Koordinatensystem. Nicht mit
transformOriginkombinieren. - Richtungsrotation —
"360_cw","-170_short","90_ccw". - clearProps —
"all"oder kommagetrennt; entfernt Inline-Stile bei Abschluss. - Relative Werte —
"+=20","-=10","*=2".
Funktionsbasierte Werte
gsap.to(".item", {
x: (i, target, targets) => i * 50,
stagger: 0.1,
});
Easing
Eingebaute Easing-Funktionen: power1–power4, back, bounce, circ, elastic, expo, sine. Jede hat .in, .out, .inOut.
Standardwerte
gsap.defaults({ duration: 0.6, ease: "power2.out" });
Steuerung von Tweens
const tween = gsap.to(".box", { x: 100 });
tween.pause();
tween.play();
tween.reverse();
tween.kill();
tween.progress(0.5);
tween.time(0.2);
gsap.matchMedia() (Responsive + Barrierefreiheit)
Führt Setup nur aus, wenn eine Media Query zutrifft; kehrt automatisch zurück, wenn sie nicht mehr zutrifft.
let mm = gsap.matchMedia();
mm.add(
{
isDesktop: "(min-width: 800px)",
reduceMotion: "(prefers-reduced-motion: reduce)",
},
(context) => {
const { isDesktop, reduceMotion } = context.conditions;
gsap.to(".box", {
rotation: isDesktop ? 360 : 180,
duration: reduceMotion ? 0 : 2,
});
},
);
Timelines
Erstellen einer Timeline
const tl = gsap.timeline({ defaults: { duration: 0.5, ease: "power2.out" } });
tl.to(".a", { x: 100 }).to(".b", { y: 50 }).to(".c", { opacity: 0 });
Positionsparameter
Das dritte Argument steuert die Platzierung:
- Absolut:
1— bei 1s - Relativ:
"+=0.5"— nach Ende;"-=0.2"— vor Ende - Label:
"intro","intro+=0.3" - Ausrichtung:
"<"— gleicher Start wie vorheriger;">"— nach vorherigem Ende;"<0.2"— 0.2s nach vorherigem Start
tl.to(".a", { x: 100 }, 0);
tl.to(".b", { y: 50 }, "<"); // gleicher Start wie .a
tl.to(".c", { opacity: 0 }, "<0.2"); // 0.2s nach .b-Start
Labels
tl.addLabel("intro", 0);
tl.to(".a", { x: 100 }, "intro");
tl.addLabel("outro", "+=0.5");
tl.play("outro");
tl.tweenFromTo("intro", "outro");
Timeline-Optionen
- paused: true — pausiert erstellen;
.play()zum Starten aufrufen. - repeat, yoyo — auf gesamte Timeline anwenden.
- defaults — Variablen, die in jeden Child-Tween übernommen werden.
Verschachtelung von Timelines
const master = gsap.timeline();
const child = gsap.timeline();
child.to(".a", { x: 100 }).to(".b", { y: 50 });
master.add(child, 0);
Wiedergabesteuerung
tl.play(), tl.pause(), tl.reverse(), tl.restart(), tl.time(2), tl.progress(0.5), tl.kill().
Performance
Transform und Opacity bevorzugen
Animationen von x, y, scale, rotation, opacity bleiben auf dem Compositor. Vermeide width, height, top, left, wenn Transforms denselben Effekt erzielen.
will-change
will-change: transform;
Nur auf Elementen, die tatsächlich animieren.
gsap.quickTo() für häufige Aktualisierungen
let xTo = gsap.quickTo("#id", "x", { duration: 0.4, ease: "power3" }),
yTo = gsap.quickTo("#id", "y", { duration: 0.4, ease: "power3" });
container.addEventListener("mousemove", (e) => {
xTo(e.pageX);
yTo(e.pageY);
});
Stagger > viele Tweens
Verwende stagger statt separater Tweens mit manuellen Verzögerungen.
Bereinigung
Pausiere oder beende Tweens für nicht sichtbare Animationen.
Referenzen (auf Anfrage geladen)
- references/effects.md — Fertige Effektmuster: Typewriter-Text, Audio-Visualizer. Lies dies, wenn vorgefertigte Effektmuster für HyperFrames benötigt werden.
Best Practices
- Verwende camelCase-Eigenschaftsnamen; bevorzuge Transform-Aliasnamen und autoAlpha.
- Bevorzuge Timelines gegenüber Verkettung mit delay; nutze den Positionsparameter.
- Füge Labels mit
addLabel()für lesbare Abläufe hinzu. - Übergebe Defaults an den Timeline-Konstruktor.
- Speichere den Rückgabewert von Tween/Timeline, wenn die Wiedergabe gesteuert werden soll.
Nicht tun
- Layout-Eigenschaften (width/height/top/left) animieren, wenn Transforms ausreichen.
- Gleichzeitig svgOrigin und transformOrigin auf demselben SVG-Element verwenden.
- Animationen mit delay verketten, wenn eine Timeline sie sequenzieren kann.
- Tweens erstellen, bevor das DOM existiert.
- Bereinigung überspringen – beende Tweens immer, wenn sie nicht mehr benötigt werden.