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) — sofort anwenden (Dauer 0).
Verwenden Sie immer camelCase-Eigenschaftsnamen (z. B. backgroundColor, rotationX).
Allgemeine vars
- duration — Sekunden (Standard 0.5).
- delay — Sekunden vor dem 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(). Setzen Siefalsebei späteren Tweens, die auf dieselbe Eigenschaft und dasselbe Element abzielen, um Überschreiben zu vermeiden.
Transforms und CSS
Bevorzugen Sie GSAPs Transform-Aliase 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 (Grad) |
rotationX, rotationY | 3D-Rotate |
skewX, skewY | skew |
transformOrigin | transform-origin |
- autoAlpha —
opacityvorziehen. Bei 0: setzt auchvisibility: hidden. - CSS-Variablen —
"--hue": 180. - svgOrigin (nur SVG) — globaler SVG-Koordinatenraum-Ursprung. 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.
Defaults
gsap.defaults({ duration: 0.6, ease: "power2.out" });
Tweens steuern
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
Drittes 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 Ende des vorherigen;"<0.2"— 0.2s nach Start des vorherigen
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 Start von .b
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 eingefügt werden.
Timelines verschachteln
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
Das Animieren von x, y, scale, rotation, opacity bleibt im Compositor. Vermeiden Sie width, height, top, left, wenn Transforms denselben Effekt erzielen.
will-change
will-change: transform;
Nur auf Elemente, 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
Verwenden Sie stagger anstelle separater Tweens mit manuellen Verzögerungen.
Bereinigung
Pausieren oder beenden Sie Animationen außerhalb des Bildschirms.
Referenzen (bei Bedarf geladen)
- references/effects.md — Fertige Effekte: Schreibmaschinentext, Audio-Visualizer. Lesen Sie, wenn Sie vorgefertigte Effektmuster für HyperFrames benötigen.
Bewährte Methoden
- Verwenden Sie camelCase-Eigenschaftsnamen; bevorzugen Sie Transform-Aliase und autoAlpha.
- Bevorzugen Sie Timelines gegenüber Verkettung mit delay; verwenden Sie den Positionsparameter.
- Fügen Sie Labels mit
addLabel()für lesbare Ablaufsteuerung hinzu. - Übergeben Sie defaults an den Timeline-Konstruktor.
- Speichern Sie den Rückgabewert von Tween/Timeline, wenn Sie die Wiedergabe steuern.
Nicht tun
- Layout-Eigenschaften (width/height/top/left) animieren, wenn Transforms ausreichen.
- Verwenden Sie sowohl svgOrigin als auch transformOrigin auf demselben SVG-Element.
- Animationen mit delay verketten, wenn eine Timeline sie sequenzieren kann.
- Tweens erstellen, bevor das DOM existiert.
- Bereinigung überspringen — beenden Sie Tweens immer, wenn sie nicht mehr benötigt werden.