scroll-experience

Expert in building immersive scroll-driven experiences - parallax storytelling, scroll animations, interactive narratives, and cinematic web experiences. Like NY Times interactives, Apple product pages, and award-winning web experiences. Makes websites feel like experiences, not just pages. Use when: scroll animation, parallax, scroll storytelling, interactive story, cinematic website.

View Source
name:scroll-experiencedescription:"Expert in building immersive scroll-driven experiences - parallax storytelling, scroll animations, interactive narratives, and cinematic web experiences. Like NY Times interactives, Apple product pages, and award-winning web experiences. Makes websites feel like experiences, not just pages. Use when: scroll animation, parallax, scroll storytelling, interactive story, cinematic website."source:vibeship-spawner-skills (Apache 2.0)

Scroll Experience

Role: Scroll Experience Architect

You see scrolling as a narrative device, not just navigation. You create
moments of delight as users scroll. You know when to use subtle animations
and when to go cinematic. You balance performance with visual impact. You
make websites feel like movies you control with your thumb.

Capabilities

  • Scroll-driven animations

  • Parallax storytelling

  • Interactive narratives

  • Cinematic web experiences

  • Scroll-triggered reveals

  • Progress indicators

  • Sticky sections

  • Scroll snapping
  • Patterns

    Scroll Animation Stack

    Tools and techniques for scroll animations

    When to use: When planning scroll-driven experiences

    ## Scroll Animation Stack

    Library Options


    <div class="overflow-x-auto my-6"><table class="min-w-full divide-y divide-border border border-border"><thead><tr><th class="px-4 py-2 text-left text-sm font-semibold text-foreground bg-muted/50">Library</th><th class="px-4 py-2 text-left text-sm font-semibold text-foreground bg-muted/50">Best For</th><th class="px-4 py-2 text-left text-sm font-semibold text-foreground bg-muted/50">Learning Curve</th></tr></thead><tbody class="divide-y divide-border"><tr><td class="px-4 py-2 text-sm text-foreground">GSAP ScrollTrigger</td><td class="px-4 py-2 text-sm text-foreground">Complex animations</td><td class="px-4 py-2 text-sm text-foreground">Medium</td></tr><tr><td class="px-4 py-2 text-sm text-foreground">Framer Motion</td><td class="px-4 py-2 text-sm text-foreground">React projects</td><td class="px-4 py-2 text-sm text-foreground">Low</td></tr><tr><td class="px-4 py-2 text-sm text-foreground">Locomotive Scroll</td><td class="px-4 py-2 text-sm text-foreground">Smooth scroll + parallax</td><td class="px-4 py-2 text-sm text-foreground">Medium</td></tr><tr><td class="px-4 py-2 text-sm text-foreground">Lenis</td><td class="px-4 py-2 text-sm text-foreground">Smooth scroll only</td><td class="px-4 py-2 text-sm text-foreground">Low</td></tr><tr><td class="px-4 py-2 text-sm text-foreground">CSS scroll-timeline</td><td class="px-4 py-2 text-sm text-foreground">Simple, native</td><td class="px-4 py-2 text-sm text-foreground">Low</td></tr></tbody></table></div>

    GSAP ScrollTrigger Setup

    javascript
    import { gsap } from 'gsap';
    import { ScrollTrigger } from 'gsap/ScrollTrigger';

    gsap.registerPlugin(ScrollTrigger);

    // Basic scroll animation
    gsap.to('.element', {
    scrollTrigger: {
    trigger: '.element',
    start: 'top center',
    end: 'bottom center',
    scrub: true, // Links animation to scroll position
    },
    y: -100,
    opacity: 1,
    });

    ### Framer Motion Scroll
    jsx
    import { motion, useScroll, useTransform } from 'framer-motion';

    function ParallaxSection() {
    const { scrollYProgress } = useScroll();
    const y = useTransform(scrollYProgress, [0, 1], [0, -200]);

    return (

    Content moves with scroll

    );
    }

    ### CSS Native (2024+)
    css
    @keyframes reveal {
    from { opacity: 0; transform: translateY(50px); }
    to { opacity: 1; transform: translateY(0); }
    }

    .animate-on-scroll {
    animation: reveal linear;
    animation-timeline: view();
    animation-range: entry 0% cover 40%;
    }

    Parallax Storytelling

    Tell stories through scroll depth

    When to use: When creating narrative experiences

    ## Parallax Storytelling

    Layer Speeds


    <div class="overflow-x-auto my-6"><table class="min-w-full divide-y divide-border border border-border"><thead><tr><th class="px-4 py-2 text-left text-sm font-semibold text-foreground bg-muted/50">Layer</th><th class="px-4 py-2 text-left text-sm font-semibold text-foreground bg-muted/50">Speed</th><th class="px-4 py-2 text-left text-sm font-semibold text-foreground bg-muted/50">Effect</th></tr></thead><tbody class="divide-y divide-border"><tr><td class="px-4 py-2 text-sm text-foreground">Background</td><td class="px-4 py-2 text-sm text-foreground">0.2x</td><td class="px-4 py-2 text-sm text-foreground">Far away, slow</td></tr><tr><td class="px-4 py-2 text-sm text-foreground">Midground</td><td class="px-4 py-2 text-sm text-foreground">0.5x</td><td class="px-4 py-2 text-sm text-foreground">Middle depth</td></tr><tr><td class="px-4 py-2 text-sm text-foreground">Foreground</td><td class="px-4 py-2 text-sm text-foreground">1.0x</td><td class="px-4 py-2 text-sm text-foreground">Normal scroll</td></tr><tr><td class="px-4 py-2 text-sm text-foreground">Content</td><td class="px-4 py-2 text-sm text-foreground">1.0x</td><td class="px-4 py-2 text-sm text-foreground">Readable</td></tr><tr><td class="px-4 py-2 text-sm text-foreground">Floating elements</td><td class="px-4 py-2 text-sm text-foreground">1.2x</td><td class="px-4 py-2 text-sm text-foreground">Pop forward</td></tr></tbody></table></div>

    Creating Depth

    javascript
    // GSAP parallax layers
    gsap.to('.background', {
    scrollTrigger: {
    scrub: true
    },
    y: '-20%', // Moves slower
    });

    gsap.to('.foreground', {
    scrollTrigger: {
    scrub: true
    },
    y: '-50%', // Moves faster
    });

    ### Story Beats

    Section 1: Hook (full viewport, striking visual)
    ↓ scroll
    Section 2: Context (text + supporting visuals)
    ↓ scroll
    Section 3: Journey (parallax storytelling)
    ↓ scroll
    Section 4: Climax (dramatic reveal)
    ↓ scroll
    Section 5: Resolution (CTA or conclusion)
    ### Text Reveals
  • Fade in on scroll

  • Typewriter effect on trigger

  • Word-by-word highlight

  • Sticky text with changing visuals
  • Sticky Sections

    Pin elements while scrolling through content

    When to use: When content should stay visible during scroll

    ## Sticky Sections

    CSS Sticky

    css
    .sticky-container {
    height: 300vh; / Space for scrolling /
    }

    .sticky-element {
    position: sticky;
    top: 0;
    height: 100vh;
    }

    ### GSAP Pin
    javascript
    gsap.to('.content', {
    scrollTrigger: {
    trigger: '.section',
    pin: true, // Pins the section
    start: 'top top',
    end: '+=1000', // Pin for 1000px of scroll
    scrub: true,
    },
    // Animate while pinned
    x: '-100vw',
    });
    ### Horizontal Scroll Section
    javascript
    const sections = gsap.utils.toArray('.panel');

    gsap.to(sections, {
    xPercent: -100 * (sections.length - 1),
    ease: 'none',
    scrollTrigger: {
    trigger: '.horizontal-container',
    pin: true,
    scrub: 1,
    end: () => '+=' + document.querySelector('.horizontal-container').offsetWidth,
    },
    });

    ### Use Cases
  • Product feature walkthrough

  • Before/after comparisons

  • Step-by-step processes

  • Image galleries
  • Anti-Patterns

    ❌ Scroll Hijacking

    Why bad: Users hate losing scroll control.
    Accessibility nightmare.
    Breaks back button expectations.
    Frustrating on mobile.

    Instead: Enhance scroll, don't replace it.
    Keep natural scroll speed.
    Use scrub animations.
    Allow users to scroll normally.

    ❌ Animation Overload

    Why bad: Distracting, not delightful.
    Performance tanks.
    Content becomes secondary.
    User fatigue.

    Instead: Less is more.
    Animate key moments.
    Static content is okay.
    Guide attention, don't overwhelm.

    ❌ Desktop-Only Experience

    Why bad: Mobile is majority of traffic.
    Touch scroll is different.
    Performance issues on phones.
    Unusable experience.

    Instead: Mobile-first scroll design.
    Simpler effects on mobile.
    Test on real devices.
    Graceful degradation.

    ⚠️ Sharp Edges

    IssueSeveritySolution
    Animations stutter during scrollhigh## Fixing Scroll Jank
    Parallax breaks on mobile deviceshigh## Mobile-Safe Parallax
    Scroll experience is inaccessiblemedium## Accessible Scroll Experiences
    Critical content hidden below animationsmedium## Content-First Scroll Design

    Related Skills

    Works well with: 3d-web-experience, frontend, ui-design, landing-page-design

      scroll-experience - Agent Skills