GSAP
Méthodes principales de tweening
- gsap.to(targets, vars) — anime de l'état actuel vers
vars. La plus courante. - gsap.from(targets, vars) — anime de
varsvers 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).
Propriétés courantes (vars)
- duration — secondes (par défaut 0.5).
- delay — secondes avant le démarrage.
- 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),trueou"auto". - repeat — nombre ou
-1pour infini. yoyo — alterne la direction avec la répétition. - onComplete, onStart, onUpdate — callbacks.
- immediateRender — par défaut
truepour from()/fromTo(). Mettre àfalsepour les tweens ultérieures ciblant la même propriété+élément pour éviter l'écrasement.
Transformations et CSS
Privilégiez 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-le à
opacity. À 0 : définit égalementvisibility: hidden. - Variables CSS —
"--hue": 180. - svgOrigin (SVG uniquement) — origine dans l'espace de coordonnées global du SVG. Ne pas combiner avec
transformOrigin. - Rotation directionnelle —
"360_cw","-170_short","90_ccw". - clearProps —
"all"ou valeurs séparées par des virgules ; supprime les styles en ligne à la fin. - Valeurs relatives —
"+=20","-=10","*=2".
Valeurs basées sur une fonction
gsap.to(".item", {
x: (i, target, targets) => i * 50,
stagger: 0.1,
});
Easing (fonctions d'accélération)
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 une configuration uniquement lorsqu'une requête média correspond ; s'annule 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éation d'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 :
- Absolue :
1— à 1s - Relative :
"+=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'appliquent à toute la timeline.
- defaults — vars fusionnées dans chaque tween enfant.
Imbrication de 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 lecture
tl.play(), tl.pause(), tl.reverse(), tl.restart(), tl.time(2), tl.progress(0.5), tl.kill().
Performances
Privilégiez les transformations et l'opacité
Animer x, y, scale, rotation, opacity reste sur le compositeur. Évitez width, height, top, left lorsque les transformations permettent le même effet.
will-change
will-change: transform;
Appliquez-le uniquement aux éléments qui sont effectivement 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 plutôt que de nombreux tweens
Utilisez stagger au lieu de tweens séparés avec des deltas 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 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 ; préférez les alias de transformation et autoAlpha.
- Préférez les timelines à l'enchaînement 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 la timeline.
- Stockez la valeur de retour du tween/timeline lorsque vous contrôlez la lecture.
À ne pas faire
- Animer les 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.
- Enchaîner des animations avec delay lorsqu'une timeline peut les séquencer.
- Créer des tweens avant que le DOM n'existe.
- Négliger le nettoyage — tuez toujours les tweens lorsqu'ils ne sont plus nécessaires.