GSAP
Méthodes de Tweening Fondamentales
- gsap.to(targets, vars) — anime de l'état actuel à
vars. Le plus courant. - gsap.from(targets, vars) — anime de
varsà l'état actuel (entrées). - gsap.fromTo(targets, fromVars, toVars) — début et fin explicites.
- gsap.set(targets, vars) — applique immédiatement (durée 0).
Utilisez toujours les noms de propriétés en camelCase (ex. backgroundColor, rotationX).
Variables Communes
- duration — secondes (par défaut 0.5).
- delay — secondes avant le début.
- ease —
"power1.out"(par défaut),"power3.inOut","back.out(1.7)","elastic.out(1, 0.3)","none". - stagger — nombre
0.1ou objet :{ amount: 0.3, from: "center" },{ each: 0.1, from: "random" }. - overwrite —
false(par défaut),true, ou"auto". - repeat — nombre ou
-1pour infini. yoyo — alterne la direction avec repeat. - onComplete, onStart, onUpdate — callbacks.
- immediateRender — par défaut
truepour from()/fromTo(). Mettre àfalsesur les tweens ultérieurs ciblant la même propriété+élément pour éviter l'écrasement.
Transforms et CSS
Préférez les alias de transformation de GSAP plutôt que la chaîne transform brute :
| Propriété GSAP | Équivalent |
|---|---|
x, y, z | translateX/Y/Z (px) |
xPercent, yPercent | translateX/Y en % |
scale, scaleX, scaleY | scale |
rotation | rotate (deg) |
rotationX, rotationY | rotation 3D |
skewX, skewY | skew |
transformOrigin | transform-origin |
- autoAlpha — préférez à
opacity. À 0 : définit égalementvisibility: hidden. - Variables CSS —
"--hue": 180. - svgOrigin (SVG uniquement) — origine dans l'espace de coordonnées SVG global. Ne pas combiner avec
transformOrigin. - Rotation directionnelle —
"360_cw","-170_short","90_ccw". - clearProps —
"all"ou séparé par des virgules ; supprime les styles en ligne à la fin. - Valeurs relatives —
"+=20","-=10","*=2".
Valeurs Basées sur des Fonctions
gsap.to(".item", {
x: (i, target, targets) => i * 50,
stagger: 0.1,
});
Easing
Easing intégrés : power1–power4, back, bounce, circ, elastic, expo, sine. Chacun a .in, .out, .inOut.
Valeurs par Défaut
gsap.defaults({ duration: 0.6, ease: "power2.out" });
Contrôle des 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 + Accessibilité)
Exécute la configuration uniquement lorsqu'une media query correspond ; se rétablit automatiquement lorsqu'elle ne correspond plus.
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
Créer une 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 });
Paramètre de Position
Le troisième argument contrôle le placement :
- Absolu :
1— à 1s - Relatif :
"+=0.5"— après la fin ;"-=0.2"— avant la fin - Label :
"intro","intro+=0.3" - Alignement :
"<"— même début que le précédent ;">"— après la fin du précédent ;"<0.2"— 0.2s après le début du précédent
tl.to(".a", { x: 100 }, 0);
tl.to(".b", { y: 50 }, "<"); // même début que .a
tl.to(".c", { opacity: 0 }, "<0.2"); // 0.2s après le début de .b
Labels
tl.addLabel("intro", 0);
tl.to(".a", { x: 100 }, "intro");
tl.addLabel("outro", "+=0.5");
tl.play("outro");
tl.tweenFromTo("intro", "outro");
Options de Timeline
- paused: true — crée en pause ; appelez
.play()pour démarrer. - repeat, yoyo — s'applique à toute la timeline.
- defaults — variables fusionnées dans chaque tween enfant.
Imbriquer des Timelines
const master = gsap.timeline();
const child = gsap.timeline();
child.to(".a", { x: 100 }).to(".b", { y: 50 });
master.add(child, 0);
Contrôle de la Lecture
tl.play(), tl.pause(), tl.reverse(), tl.restart(), tl.time(2), tl.progress(0.5), tl.kill().
Performances
Privilégier Transform et Opacity
L'animation de x, y, scale, rotation, opacity reste sur le compositeur. Évitez width, height, top, left lorsque les transformations produisent le même effet.
will-change
will-change: transform;
Uniquement sur les éléments qui sont réellement animés.
gsap.quickTo() pour les Mises à Jour Fréquentes
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 > Plusieurs Tweens
Utilisez stagger plutôt que des tweens séparés avec des délais manuels.
Nettoyage
Mettez en pause ou tuez les animations hors écran.
Références (chargées à la demande)
- references/effects.md — Effets prêts à l'emploi : texte à la machine à écrire, visualiseur audio. Lisez ce fichier lorsque vous avez besoin de motifs d'effets prêts à l'emploi pour HyperFrames.
Bonnes Pratiques
- Utilisez des noms de propriétés en camelCase ; privilégiez les alias de transformation et autoAlpha.
- Préférez les timelines au chaînage avec delay ; utilisez le paramètre de position.
- Ajoutez des labels avec
addLabel()pour un séquencement lisible. - Passez les valeurs par défaut dans le constructeur de timeline.
- Stockez la valeur de retour du tween/timeline lors du contrôle de la lecture.
À Ne Pas Faire
- Animer des propriétés de mise en page (width/height/top/left) lorsque des transformations suffisent.
- Utiliser à la fois svgOrigin et transformOrigin sur le même élément SVG.
- Chaîner des animations avec delay lorsqu'une timeline peut les séquencer.
- Créer des tweens avant que le DOM n'existe.
- Omettre le nettoyage — tuez toujours les tweens lorsqu'ils ne sont plus nécessaires.