GSAP
Kern-Tween-Methoden
- gsap.to(targets, vars) — vom aktuellen Zustand zu
varsanimieren. Am häufigsten. - gsap.from(targets, vars) — von
varszum aktuellen Zustand animieren (Eingänge). - gsap.fromTo(targets, fromVars, toVars) — expliziter Start und Ende.
- 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 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 — Rückruffunktionen.
- immediateRender — Standard
truefür from()/fromTo(). Setzen Siefalsebei späteren Tweens, die dieselbe Eigenschaft+Element anvisieren, 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
Integrierte Easing-Funktionen: power1–power4, back, bounce, circ, elastic, expo, sine. Jede hat .in, .out, .inOut.
Standardwerte
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() (Responsiv + 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
Eine Timeline erstellen
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;">"— nachdem vorheriger endet;"<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()aufrufen, um zu starten. - repeat, yoyo — auf gesamte Timeline anwenden.
- defaults — vars werden in jedes untergeordnete Tween übernommen.
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().
Leistung
Transform und Opacity bevorzugen
Das Animieren von x, y, scale, rotation, opacity bleibt auf dem Compositor. Vermeiden Sie 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
Verwenden Sie stagger anstelle separater Tweens mit manuellen Verzögerungen.
Bereinigung
Pausieren oder killen Sie Animationen, die nicht im Bild sind.
Referenzen (bei Bedarf geladen)
- references/effects.md — Fertige Effekte: Schreibmaschinentext, Audio-Visualizer. Lesen Sie dies, wenn Sie fertige Effektmuster für HyperFrames benötigen.
Best Practices
- 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 Abläufe hinzu. - Übergeben Sie defaults an den Timeline-Konstruktor.
- Speichern Sie den Rückgabewert von Tween/Timeline, wenn Sie die Wiedergabe steuern möchten.
Nicht tun
- Layout-Eigenschaften (width/height/top/left) animieren, wenn Transforms ausreichen.
- Sowohl svgOrigin als auch transformOrigin auf demselben SVG-Element verwenden.
- Animationen mit delay verketten, wenn eine Timeline sie sequenzieren kann.
- Tweens erstellen, bevor das DOM existiert.
- Bereinigung überspringen — killen Sie Tweens immer, wenn sie nicht mehr benötigt werden.