home / skills / dylantarre / animation-principles / scroll-animations

This skill helps implement scroll-triggered animations inspired by Disney's principles, delivering smooth, engaging reveals and parallax without hindering

npx playbooks add skill dylantarre/animation-principles --skill scroll-animations

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
3.3 KB
---
name: scroll-animations
description: Use when triggering animations on scroll - reveal effects, parallax, sticky headers, progress indicators, or any scroll-linked motion.
---

# Scroll Animations

Apply Disney's 12 principles to scroll-triggered motion.

## Principle Application

**Squash & Stretch**: Elements can compress slightly while scrolling fast, settle when stopped.

**Anticipation**: Content should be slightly visible before full reveal. Start animations at 10-20% visibility.

**Staging**: Reveal content in reading order. Top-to-bottom, left-to-right progression.

**Straight Ahead vs Pose-to-Pose**: Define clear "hidden" and "revealed" poses. Scroll position interpolates between them.

**Follow Through & Overlapping**: Stagger reveals. First element triggers at 20% viewport, next at 25%, etc.

**Slow In/Slow Out**: Use ease-out for reveals triggered by scroll. Content settles into place.

**Arcs**: Parallax elements move on curves relative to scroll. Slight horizontal offset as vertical scroll occurs.

**Secondary Action**: Fade + slide + scale can combine for richer reveals.

**Timing**:
- Reveal animation: 400-600ms (allows scroll to continue)
- Parallax: real-time, 1:1 or fractional ratios
- Sticky transitions: 200-300ms

**Exaggeration**: Subtle for scroll - users control the pace. Let scroll speed be the exaggeration.

**Solid Drawing**: Elements should never jump or teleport. Smooth interpolation at all scroll positions.

**Appeal**: Scroll animations should reward exploration, not obstruct it.

## Timing Recommendations

| Scroll Animation | Duration | Trigger Point | Easing |
|-----------------|----------|---------------|--------|
| Fade In | 500ms | 20% visible | ease-out |
| Slide Up | 600ms | 15% visible | ease-out |
| Parallax | real-time | continuous | linear |
| Sticky Header | 200ms | threshold | ease-out |
| Progress Bar | real-time | continuous | linear |
| Section Reveal | 600ms | 25% visible | ease-out |

## Implementation Patterns

```css
/* Scroll-triggered reveal */
.reveal {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity 500ms ease-out, transform 600ms ease-out;
}

.reveal.visible {
  opacity: 1;
  transform: translateY(0);
}

/* CSS-only parallax */
.parallax-container {
  perspective: 1px;
  overflow-y: auto;
}

.parallax-slow {
  transform: translateZ(-1px) scale(2);
}
```

## Intersection Observer Pattern

```javascript
const observer = new IntersectionObserver(
  (entries) => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        entry.target.classList.add('visible');
      }
    });
  },
  { threshold: 0.2, rootMargin: '0px 0px -10% 0px' }
);

document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
```

## Scroll-Linked Animation (CSS)

```css
@keyframes reveal {
  from { opacity: 0; transform: translateY(30px); }
  to { opacity: 1; transform: translateY(0); }
}

.scroll-reveal {
  animation: reveal linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 50%;
}
```

## Key Rules

1. Never block scroll or hijack scroll behavior
2. Animations should complete within viewport, not require precise scroll position
3. Trigger early (10-20% visible) so animation completes before full view
4. Provide `prefers-reduced-motion` alternative - instant reveals, no parallax
5. Test on mobile - scroll animations must be smooth at 60fps

Overview

This skill applies Disney’s 12 animation principles to scroll-triggered motion like reveals, parallax, sticky headers, progress indicators, and other scroll-linked effects. It focuses on readable, performant patterns and timing guidance so animations feel natural, responsive, and rewarding without obstructing user control.

How this skill works

It maps principles such as anticipation, slow in/slow out, arcs, and follow-through to concrete scroll patterns: reveal animations start slightly before elements are fully visible, parallax moves on curved offsets, and sticky transitions use short, snappy timing. Implementation examples show CSS transitions, CSS scroll-linked animation snippets, and an Intersection Observer pattern to trigger classes at 10–25% visibility.

When to use it

  • Reveal effects when content enters the viewport (cards, headings, images).
  • Parallax for layered backgrounds and subtle depth on long pages.
  • Sticky headers or controls that change state based on scroll threshold.
  • Progress indicators tied to document or section scroll progress.
  • Any scroll-linked motion that should feel tactile and controlled by the user.

Best practices

  • Trigger early (10–25% visibility) so animations complete naturally as users scroll.
  • Keep durations modest: reveals 400–600ms, sticky transitions 200–300ms, parallax real-time ratios.
  • Respect user preferences: provide prefers-reduced-motion alternatives (instant reveal, no parallax).
  • Never block or hijack scroll; allow users to control pace and avoid precise positioning requirements.
  • Test on mobile and aim for 60fps: simplify transforms, use will-change, and avoid layout thrashing.

Example use cases

  • Article hero sections that slide and fade into view as readers scroll down.
  • Image galleries with layered parallax to suggest depth as the page moves.
  • Sticky navigation that subtly compresses and reveals state changes on threshold crossing.
  • Progress bars updating continuously during long-form reading or multi-section flows.
  • Staggered list reveals where each item appears with a short overlap for follow-through effect.

FAQ

What trigger percentage should I use for reveals?

Start between 10–25% visibility; 20% is a reliable balance so the animation completes while content is entering view.

How do I keep parallax performant on mobile?

Use transform translateZ/translateY with fractional ratios, limit layers, avoid large repaints, and honor prefers-reduced-motion to disable parallax.

How long should reveal animations be?

Use 400–600ms for most reveals; keep sticky transitions around 200–300ms. Parallax is continuous and tied to scroll speed.