O que GSAP faz?
Métodos Core de Tween
- gsap.to(targets, vars) — anima do estado atual para
vars. Mais comum. - gsap.from(targets, vars) — anima de
varspara o estado atual (entradas). - gsap.fromTo(targets, fromVars, toVars) — início e fim explícitos.
- gsap.set(targets, vars) — aplica imediatamente (duração 0).
Sempre use nomes de propriedades em camelCase (ex.: backgroundColor, rotationX).
vars Comuns
- duration — segundos (padrão 0.5).
- delay — segundos antes de iniciar.
- ease —
"power1.out"(padrão),"power3.inOut","back.out(1.7)","elastic.out(1, 0.3)","none". - stagger — número
0.1ou objeto:{ amount: 0.3, from: "center" },{ each: 0.1, from: "random" }. - overwrite —
false(padrão),trueou"auto". - repeat — número ou
-1para infinito. yoyo — alterna direção com repeat. - onComplete, onStart, onUpdate — callbacks.
- immediateRender — padrão
truepara from()/fromTo(). Definafalseem tweens posteriores que miram a mesma propriedade+elemento para evitar sobrescrição.
Transformações e CSS
Prefira os aliases de transformação do GSAP em vez da string transform raw:
| Propriedade GSAP | Equivalente |
|---|---|
x, y, z | translateX/Y/Z (px) |
xPercent, yPercent | translateX/Y em % |
scale, scaleX, scaleY | escala |
rotation | rotate (graus) |
rotationX, rotationY | rotate 3D |
skewX, skewY | skew |
transformOrigin | transform-origin |
- autoAlpha — prefira em vez de
opacity. Em 0: também definevisibility: hidden. - Variáveis CSS —
"--hue": 180. - svgOrigin (apenas SVG) — origem no espaço de coordenadas SVG global. Não combine com
transformOrigin. - Rotação direcional —
"360_cw","-170_short","90_ccw". - clearProps —
"all"ou separado por vírgulas; remove estilos inline ao completar. - Valores relativos —
"+=20","-=10","*=2".
Valores Baseados em Função
gsap.to(".item", {
x: (i, target, targets) => i * 50,
stagger: 0.1,
});
Easing
Eases embutidos: power1–power4, back, bounce, circ, elastic, expo, sine. Cada um tem .in, .out, .inOut.
Padrões (Defaults)
gsap.defaults({ duration: 0.6, ease: "power2.out" });
Controlando 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() (Responsivo + Acessibilidade)
Executa a configuração apenas quando uma media query corresponde; reverte automaticamente quando para de corresponder.
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
Criando uma 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 });
Parâmetro de Posição
Terceiro argumento controla o posicionamento:
- Absoluto:
1— em 1s - Relativo:
"+=0.5"— após o fim;"-=0.2"— antes do fim - Rótulo:
"intro","intro+=0.3" - Alinhamento:
"<"— mesmo início do anterior;">"— após o anterior terminar;"<0.2"— 0.2s após o anterior iniciar
tl.to(".a", { x: 100 }, 0);
tl.to(".b", { y: 50 }, "<"); // mesmo início que .a
tl.to(".c", { opacity: 0 }, "<0.2"); // 0.2s após .b iniciar
Rótulos
tl.addLabel("intro", 0);
tl.to(".a", { x: 100 }, "intro");
tl.addLabel("outro", "+=0.5");
tl.play("outro");
tl.tweenFromTo("intro", "outro");
Opções da Timeline
- paused: true — cria pausada; chame
.play()para iniciar. - repeat, yoyo — aplica-se a toda timeline.
- defaults — vars mescladas em cada tween filho.
Aninhando Timelines
const master = gsap.timeline();
const child = gsap.timeline();
child.to(".a", { x: 100 }).to(".b", { y: 50 });
master.add(child, 0);
Controle de Reprodução
tl.play(), tl.pause(), tl.reverse(), tl.restart(), tl.time(2), tl.progress(0.5), tl.kill().
Performance
Prefira Transform e Opacity
Animar x, y, scale, rotation, opacity permanece no compositor. Evite width, height, top, left quando transformações alcançam o mesmo efeito.
will-change
will-change: transform;
Apenas em elementos que realmente animam.
gsap.quickTo() para Atualizações Frequentes
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 > Múltiplos Tweens
Use stagger em vez de tweens separados com atrasos manuais.
Limpeza
Pause ou mate animações fora da tela.
Referências (carregadas sob demanda)
- references/effects.md — Efeitos prontos: texto de máquina de escrever, visualizador de áudio. Leia quando precisar de padrões de efeitos prontos para HyperFrames.
Melhores Práticas
- Use nomes de propriedades em camelCase; prefira aliases de transformação e autoAlpha.
- Prefira timelines em vez de encadeamento com delay; use o parâmetro de posição.
- Adicione rótulos com
addLabel()para sequenciamento legível. - Passe defaults no construtor da timeline.
- Armazene o valor de retorno do tween/timeline ao controlar a reprodução.
Não Faça
- Anime propriedades de layout (width/height/top/left) quando transformações forem suficientes.
- Use svgOrigin e transformOrigin no mesmo elemento SVG.
- Encadeie animações com delay quando uma timeline pode sequenciá-las.
- Crie tweens antes do DOM existir.
- Pule a limpeza — sempre mate tweens quando não forem mais necessários.