Skip to content
cccskills
FreePublished on GitHub

gsap-timeline

Build coordinated animation sequences with GSAP timelines. Set when each movement starts, overlap effects, name key moments, combine smaller sequences, and control playback, including pause, reverse, restart, and jumps to a specific point.

OriginalShow the original description

Official GSAP skill for timelines — gsap.timeline(), position parameter, nesting, playback. Use when sequencing animations, choreographing keyframes, or when the user asks about animation sequencing, timelines, or animation order (in GSAP or when recommending a library that supports timelines).

See how to install

Good for

  • Animating several elements in a planned order
  • Overlapping effects at precise times
  • Organizing animation sections with labels
  • Combining smaller animation sequences
  • Adding playback, pause, and reverse controls

Files included (1)

  • SKILL.md4.3 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

GSAP Timeline

When to Use This Skill

Apply when building multi-step animations, coordinating several tweens in sequence or parallel, or when the user asks about timelines, sequencing, or keyframe-style animation in GSAP.

Related skills: For single tweens and eases use gsap-core; for scroll-driven timelines use gsap-scrolltrigger; for React use gsap-react.

Creating a Timeline

const tl = gsap.timeline();
tl.to(".a", { x: 100, duration: 1 })
  .to(".b", { y: 50, duration: 0.5 })
  .to(".c", { opacity: 0, duration: 0.3 });

By default, tweens are appended one after another. Use the position parameter to place tweens at specific times or relative to other tweens.

Position Parameter

Third argument (or position property in vars) controls placement:

  • Absolute: 1 — start at 1 second.
  • Relative (default): "+=0.5" — 0.5s after end; "-=0.2" — 0.2s before end.
  • Label: "labelName" — at that label; "labelName+=0.3" — 0.3s after label.
  • Placement: "<" — start when recently-added animation starts; ">" — start when recently-added animation ends (default); "<0.2" — 0.2s after recently-added animation start.

Examples:

tl.to(".a", { x: 100 }, 0);           // at 0
tl.to(".b", { y: 50 }, "+=0.5");      // 0.5s after last end
tl.to(".c", { opacity: 0 }, "<");     // same start as previous
tl.to(".d", { scale: 2 }, "<0.2");    // 0.2s after previous start

Timeline Defaults

Pass defaults into the timeline so all child tweens inherit:

const tl = gsap.timeline({ defaults: { duration: 0.5, ease: "power2.out" } });
tl.to(".a", { x: 100 }).to(".b", { y: 50 }); // both use 0.5s and power2.out

Timeline Options (constructor)

  • paused: true — create paused; call .play() to start.
  • repeat, yoyo — same as tweens; apply to whole timeline.
  • onComplete, onStart, onUpdate — timeline-level callbacks.
  • defaults — vars merged into every child tween.

Labels

Add and use labels for readable, maintainable sequencing:

tl.addLabel("intro", 0);
tl.to(".a", { x: 100 }, "intro");
tl.addLabel("outro", "+=0.5");
tl.to(".b", { opacity: 0 }, "outro");
tl.play("outro");  // start from "outro"
tl.tweenFromTo("intro", "outro"); // pauses the timeline and returns a new Tween that animates the timeline's playhead from intro to outro with no ease.

Nesting Timelines

Timelines can contain other timelines.

const master = gsap.timeline();
const child = gsap.timeline();
child.to(".a", { x: 100 }).to(".b", { y: 50 });
master.add(child, 0);
master.to(".c", { opacity: 0 }, "+=0.2");

Controlling Playback

  • tl.play() / tl.pause()
  • tl.reverse() / tl.progress(1) then tl.reverse()
  • tl.restart() — from start.
  • tl.time(2) — seek to 2 seconds.
  • tl.progress(0.5) — seek to 50%.
  • tl.kill() — kill timeline and (by default) its children.

Official GSAP Best practices

  • ✅ Prefer timelines for sequencing
  • ✅ Use the position parameter (third argument) to place tweens at specific times or relative to labels.
  • ✅ Add labels with addLabel() for readable, maintainable sequencing.
  • ✅ Pass defaults into the timeline constructor so child tweens inherit duration, ease, etc.
  • ✅ Put ScrollTrigger on the timeline (or top-level tween), not on tweens inside a timeline.

Do Not

  • ❌ Chain animations with delay when a timeline can sequence them; prefer gsap.timeline() and the position parameter for multi-step animation.
  • ❌ Forget to pass defaults (e.g. defaults: { duration: 0.5, ease: "power2.out" }) when many child tweens share the same duration or ease.
  • ❌ Forget that duration on the timeline constructor is not the same as tween duration; timeline “duration” is determined by its children.
  • ❌ Nest animations that contain a ScrollTrigger; ScrollTriggers should only be on top-level Tweens/Timelines.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

gsap-core

FreeSummary

Create and review GSAP code that animates webpage elements and SVG graphics. Covers movement, fades, easing that controls speed changes, staggered effects, playback controls, and adaptations for screen size and reduced-motion preferences.

  • Adding entrance animations to webpage elements
  • Animating multiple items with staggered starts
  • Adjusting motion for desktop and mobile screens
greensock/gsap-skills16.6KUpdated Jul 30, 2026

gsap-frameworks

FreeSummary

Add GSAP animations to Vue, Nuxt, Svelte, and SvelteKit components with guidance on when animations should start, which elements they affect, and how to remove animations and restore styles when components are removed.

  • Adding animations to Vue components
  • Reviewing animation cleanup in Svelte
  • Limiting animations to elements within a component
greensock/gsap-skills16.6KUpdated Jul 30, 2026

gsap-performance

FreeSummary

Improve GSAP animation performance by reviewing animated properties, browser layout work, and simultaneous updates. Use transforms, grouped updates, reusable animations, and targeted cleanup to reduce stuttering in lists, mouse followers, and scroll effects.

  • Reviewing stuttering GSAP animations
  • Reducing animation load in long lists
  • Optimizing mouse-following effects
greensock/gsap-skills16.6KUpdated Jul 30, 2026

gsap-plugins

FreeSummary

Build and review GSAP effects for text, SVG graphics, scrolling, dragging, and layout changes. The skill explains which plugins, or extensions, fit each task, how to register them, and how to configure and clean them up.

  • Animating headings character by character
  • Drawing or morphing SVG graphics
  • Adding draggable cards with momentum
greensock/gsap-skills16.6KUpdated Jul 30, 2026

gsap-react

FreeSummary

Integrate GSAP animations into React and Next.js components using useGSAP, element references, and scoped selectors. The skill guides dependency updates, event callbacks, and cleanup when components unmount, while keeping animation code out of server rendering.

  • Adding GSAP animations to React components
  • Restricting animations to elements within one component
  • Cleaning up animations when components unmount
greensock/gsap-skills16.6KUpdated Jul 30, 2026

Build web animations with GSAP ScrollTrigger that respond to scrolling. Move or reveal elements, keep sections pinned in place, link animation progress to scroll position, and create parallax effects or horizontal movement driven by vertical scrolling.

  • Reveal cards as they enter the viewport
  • Keep a section pinned during scrolling
  • Link animation progress to scroll position
greensock/gsap-skills16.6KUpdated Jul 30, 2026

See all skills by greensock

Report a problem with this skill