---
id: daily-gsap-timeline
name: "gsap-timeline"
url: https://skills.yangsir.net/skill/daily-gsap-timeline
author: greensock
domain: ai-frontend-engineering
tags: ["gsap", "timeline", "sequencing", "animation", "keyframes"]
install_count: 12000
rating: 4.50 (89 reviews)
github: https://github.com/greensock/gsap-skills
---

# gsap-timeline

> GSAP 时间轴专家，协调多步骤序列动画和并行动画，实现关键帧式复杂动画编排

**Stats**: 12,000 installs · 4.5/5 (89 reviews)

## Before / After 对比

### 复杂动画编排

**Before**:

用 CSS keyframes 或回调嵌套实现序列动画，时序调整困难，动画组合混乱难以维护

**After**:

用 Timeline 声明式编排动画序列，轻松控制播放速度、时序关系和动画组合

| Metric | Before | After | Change |
|---|---|---|---|
| 编排时间 | 4hours | 0.5hours | -88% |
| 动画调整灵活性 | 30% | 95% | +217% |

## Readme

# gsap-timeline

# 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.

Weekly Installs275Repository[greensock/gsap-skills](https://github.com/greensock/gsap-skills)GitHub Stars239First Seen1 day agoSecurity Audits[Gen Agent Trust HubPass](/greensock/gsap-skills/gsap-timeline/security/agent-trust-hub)[SocketPass](/greensock/gsap-skills/gsap-timeline/security/socket)[SnykPass](/greensock/gsap-skills/gsap-timeline/security/snyk)Installed oncodex274kimi-cli273gemini-cli273amp273github-copilot273opencode273

---
*Source: https://skills.yangsir.net/skill/daily-gsap-timeline*
*Markdown mirror: https://skills.yangsir.net/api/skill/daily-gsap-timeline/markdown*