GSAP Cheatsheet

Tweens (to, from, fromTo)

Use this GSAP reference while you build software engineering projects, review code for technical interview prep, or polish examples for a software engineer resume.

gsap.to()

Animates from current state → to the values you specify.

// Signature: gsap.to(target, vars)
gsap.to(".box", {
  x: 200,          // transform: translateX(200px)
  opacity: 0,
  duration: 1,     // seconds (default: 0.5)
  ease: "power2.out",
  delay: 0.2,
});

// Multiple targets at once
gsap.to([".card", ".title"], { y: -20, opacity: 0, duration: 0.4 });

// Returns a Tween instance
const tween = gsap.to(".box", { rotation: 360, duration: 2 });
tween.pause();

gsap.from()

Animates from the values you specify → to current state (reverse of .to()).

// Element slides in from y:60, fading in from opacity 0 to its current opacity
gsap.from(".hero", {
  y: 60,
  opacity: 0,
  duration: 0.8,
  ease: "power3.out",
});

// "from" values are the START, element ends at its CSS/natural state
gsap.from(".nav li", {
  x: -30,
  opacity: 0,
  stagger: 0.08,
  duration: 0.5,
});

Gotcha: .from() sets the property immediately on creation then animates toward the current value. If the current value is also animating, use .fromTo() for deterministic results.

gsap.fromTo()

Explicitly defines both start and end — the safest option when composing complex sequences.

// Signature: gsap.fromTo(target, fromVars, toVars)
gsap.fromTo(
  ".box",
  { x: -100, opacity: 0 },     // FROM
  { x: 0,    opacity: 1, duration: 0.6, ease: "power2.out" } // TO
);

duration, ease, delay, onComplete, etc. always go in toVars (the second object), never in fromVars.

gsap.set()

Sets properties instantly with no animation. A zero-duration tween.

gsap.set(".box", { x: 100, opacity: 0.5, display: "flex" });
gsap.set([".a", ".b"], { clearProps: "all" }); // remove inline styles

Core Tween Properties (vars)

PropertyTypeDefaultDescription
durationnumber0.5Seconds for the tween
delaynumber0Seconds before the tween starts
easestring / function"power1.out"Easing function
repeatnumber0Extra repeats; -1 = infinite
repeatDelaynumber0Seconds between repeats
yoyobooleanfalseReverse every other repeat
yoyoEasestring / booleanfalseDifferent ease on reverse leg
staggernumber / object0Delay between multiple targets
pausedbooleanfalseDon't play on creation
reversedbooleanfalseStart playing in reverse
immediateRenderbooleanvariesApply from values instantly
overwritestring / booleanfalseKill conflicting tweens
idstringFor gsap.getById()
dataanyArbitrary metadata; accessible in callbacks
inheritbooleantrueInherit defaults from gsap.defaults()

Overwrite Modes

ValueBehavior
false (default)No overwriting — tweens stack
true / "all"Kill ALL tweens on the target
"auto"Kill only conflicting properties on the target (smart mode)
gsap.to(".box", { x: 200, overwrite: "auto" });
// only kills other tweens that are also animating "x" on .box

// Set globally to avoid fighting tweens
gsap.defaults({ overwrite: "auto" });

immediateRender

Controls when from / fromTo values are applied.

// Default behavior: from() sets values immediately on creation (before play)
gsap.from(".box", { x: -100 }); // x snaps to -100 right now

// Delay the snap (useful inside timelines)
gsap.from(".box", { x: -100, immediateRender: false });

// to() does NOT immediateRender by default (reads live value at play time)
gsap.to(".box", { x: 200, immediateRender: true }); // snapshot x now

Relative, Percentage, and Unit Values

// Relative (+=, -=, *=)
gsap.to(".box", { x: "+=100" });        // add 100 to current x
gsap.to(".box", { rotation: "-=45" });  // subtract 45deg

// Percentage of element's own dimensions (requires GSAP 3.x)
gsap.to(".box", { x: "50%", y: "25%" }); // % of element width/height

// Explicit units
gsap.to(".box", { width: "50vw", fontSize: "2rem", top: "10%" });

// Random value
gsap.to(".box", { x: "random(-100, 100)" });       // random between -100 and 100
gsap.to(".box", { x: gsap.utils.random(-200, 200) });

Function-Based Values

Pass a function instead of a value — called once per target with (index, target, targets).

gsap.to(".box", {
  x: (i) => (i + 1) * 100,          // box0 → 100, box1 → 200, …
  y: (i, el) => el.dataset.y,       // read from data attribute
  duration: (i) => 0.3 + i * 0.1,  // stagger duration without stagger prop
});

Chaining Shorthand (tween methods)

// Most tween control methods return the tween for chaining
gsap.to(".box", { x: 200 })
    .pause(0)
    .delay(0.5);

// Common tween instance methods
const tween = gsap.to(".box", { y: 100, paused: true });
tween.play();
tween.pause();
tween.reverse();
tween.restart();
tween.seek(0.5);       // jump to 0.5 seconds
tween.progress(0.75);  // jump to 75% of the tween
tween.kill();

gsap.getById() and gsap.getTweensOf()

// Get a specific tween by id
const t = gsap.to(".box", { x: 100, id: "myMove" });
gsap.getById("myMove").pause();

// Get all active tweens targeting an element
const tweens = gsap.getTweensOf(".box");
tweens.forEach(t => t.kill());

// Get all active tweens (all targets)
const all = gsap.globalTimeline.getChildren(true, true, false);

gsap.killTweensOf()

// Kill all tweens on a target
gsap.killTweensOf(".box");

// Kill only specific properties
gsap.killTweensOf(".box", "x,opacity");

// Kill after a delay using ticker
gsap.delayedCall(2, () => gsap.killTweensOf(".box"));

gsap.delayedCall()

A timed callback — cleaner than setTimeout because it respects GSAP's timeScale and pause.

const dc = gsap.delayedCall(2, myFunction, ["arg1", "arg2"]);

dc.kill();     // cancel
dc.restart();  // reset and replay
dc.pause();    // freeze the countdown