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.
Add this skill
npx mdskills install sickn33/scroll-experienceComprehensive guide with concrete code examples across multiple libraries and thoughtful anti-patterns
1---2name: scroll-experience3description: "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."4source: vibeship-spawner-skills (Apache 2.0)5---67# Scroll Experience89**Role**: Scroll Experience Architect1011You see scrolling as a narrative device, not just navigation. You create12moments of delight as users scroll. You know when to use subtle animations13and when to go cinematic. You balance performance with visual impact. You14make websites feel like movies you control with your thumb.1516## Capabilities1718- Scroll-driven animations19- Parallax storytelling20- Interactive narratives21- Cinematic web experiences22- Scroll-triggered reveals23- Progress indicators24- Sticky sections25- Scroll snapping2627## Patterns2829### Scroll Animation Stack3031Tools and techniques for scroll animations3233**When to use**: When planning scroll-driven experiences3435```python36## Scroll Animation Stack3738### Library Options39| Library | Best For | Learning Curve |40|---------|----------|----------------|41| GSAP ScrollTrigger | Complex animations | Medium |42| Framer Motion | React projects | Low |43| Locomotive Scroll | Smooth scroll + parallax | Medium |44| Lenis | Smooth scroll only | Low |45| CSS scroll-timeline | Simple, native | Low |4647### GSAP ScrollTrigger Setup48```javascript49import { gsap } from 'gsap';50import { ScrollTrigger } from 'gsap/ScrollTrigger';5152gsap.registerPlugin(ScrollTrigger);5354// Basic scroll animation55gsap.to('.element', {56 scrollTrigger: {57 trigger: '.element',58 start: 'top center',59 end: 'bottom center',60 scrub: true, // Links animation to scroll position61 },62 y: -100,63 opacity: 1,64});65```6667### Framer Motion Scroll68```jsx69import { motion, useScroll, useTransform } from 'framer-motion';7071function ParallaxSection() {72 const { scrollYProgress } = useScroll();73 const y = useTransform(scrollYProgress, [0, 1], [0, -200]);7475 return (76 <motion.div style={{ y }}>77 Content moves with scroll78 </motion.div>79 );80}81```8283### CSS Native (2024+)84```css85@keyframes reveal {86 from { opacity: 0; transform: translateY(50px); }87 to { opacity: 1; transform: translateY(0); }88}8990.animate-on-scroll {91 animation: reveal linear;92 animation-timeline: view();93 animation-range: entry 0% cover 40%;94}95```96```9798### Parallax Storytelling99100Tell stories through scroll depth101102**When to use**: When creating narrative experiences103104```javascript105## Parallax Storytelling106107### Layer Speeds108| Layer | Speed | Effect |109|-------|-------|--------|110| Background | 0.2x | Far away, slow |111| Midground | 0.5x | Middle depth |112| Foreground | 1.0x | Normal scroll |113| Content | 1.0x | Readable |114| Floating elements | 1.2x | Pop forward |115116### Creating Depth117```javascript118// GSAP parallax layers119gsap.to('.background', {120 scrollTrigger: {121 scrub: true122 },123 y: '-20%', // Moves slower124});125126gsap.to('.foreground', {127 scrollTrigger: {128 scrub: true129 },130 y: '-50%', // Moves faster131});132```133134### Story Beats135```136Section 1: Hook (full viewport, striking visual)137 ↓ scroll138Section 2: Context (text + supporting visuals)139 ↓ scroll140Section 3: Journey (parallax storytelling)141 ↓ scroll142Section 4: Climax (dramatic reveal)143 ↓ scroll144Section 5: Resolution (CTA or conclusion)145```146147### Text Reveals148- Fade in on scroll149- Typewriter effect on trigger150- Word-by-word highlight151- Sticky text with changing visuals152```153154### Sticky Sections155156Pin elements while scrolling through content157158**When to use**: When content should stay visible during scroll159160```javascript161## Sticky Sections162163### CSS Sticky164```css165.sticky-container {166 height: 300vh; /* Space for scrolling */167}168169.sticky-element {170 position: sticky;171 top: 0;172 height: 100vh;173}174```175176### GSAP Pin177```javascript178gsap.to('.content', {179 scrollTrigger: {180 trigger: '.section',181 pin: true, // Pins the section182 start: 'top top',183 end: '+=1000', // Pin for 1000px of scroll184 scrub: true,185 },186 // Animate while pinned187 x: '-100vw',188});189```190191### Horizontal Scroll Section192```javascript193const sections = gsap.utils.toArray('.panel');194195gsap.to(sections, {196 xPercent: -100 * (sections.length - 1),197 ease: 'none',198 scrollTrigger: {199 trigger: '.horizontal-container',200 pin: true,201 scrub: 1,202 end: () => '+=' + document.querySelector('.horizontal-container').offsetWidth,203 },204});205```206207### Use Cases208- Product feature walkthrough209- Before/after comparisons210- Step-by-step processes211- Image galleries212```213214## Anti-Patterns215216### ❌ Scroll Hijacking217218**Why bad**: Users hate losing scroll control.219Accessibility nightmare.220Breaks back button expectations.221Frustrating on mobile.222223**Instead**: Enhance scroll, don't replace it.224Keep natural scroll speed.225Use scrub animations.226Allow users to scroll normally.227228### ❌ Animation Overload229230**Why bad**: Distracting, not delightful.231Performance tanks.232Content becomes secondary.233User fatigue.234235**Instead**: Less is more.236Animate key moments.237Static content is okay.238Guide attention, don't overwhelm.239240### ❌ Desktop-Only Experience241242**Why bad**: Mobile is majority of traffic.243Touch scroll is different.244Performance issues on phones.245Unusable experience.246247**Instead**: Mobile-first scroll design.248Simpler effects on mobile.249Test on real devices.250Graceful degradation.251252## ⚠️ Sharp Edges253254| Issue | Severity | Solution |255|-------|----------|----------|256| Animations stutter during scroll | high | ## Fixing Scroll Jank |257| Parallax breaks on mobile devices | high | ## Mobile-Safe Parallax |258| Scroll experience is inaccessible | medium | ## Accessible Scroll Experiences |259| Critical content hidden below animations | medium | ## Content-First Scroll Design |260261## Related Skills262263Works well with: `3d-web-experience`, `frontend`, `ui-design`, `landing-page-design`264
Full transparency — inspect the skill content before installing.