Back to blog

Article

How to Build Scrollytelling Without Scroll Jank

Build scrollytelling that stays smooth on mobile with IntersectionObserver, scroll timelines, progressive enhancement, and fallback strategy.

Article details

Published

June 01, 2026

Reading time

5 min

Main sections

13

5 min read5 FAQs

Scrollytelling is useful when progressive revelation improves comprehension. It is harmful when motion density, sticky panels, or scroll-coupled effects make the page harder to read than a normal document.

If you want to build scrollytelling on the web, the safest approach is progressive enhancement: start with semantic content, add sticky structure, layer in state changes with observers, and use scroll-driven animation only where it improves the story without causing scroll jank.

What scrollytelling is, and what it breaks

Scrollytelling is a narrative pattern where scrolling controls what content is revealed, emphasized, or animated over time. It is compelling because it creates pacing and focus. It is fragile because it can easily damage readability, mobile behavior, and performance.

The main failure modes are:

  • too much sticky content
  • large continuous animation tied directly to scroll
  • mobile layouts that feel trapped
  • reduced-motion users getting the same heavy motion path

The progressive-enhancement architecture

The best scrollytelling systems are built in layers.

1. Semantic content first

The story should still read as a normal document if animation fails.

2. Sticky frame second

Use sticky layout to preserve context only where it makes the narrative easier to follow. Do not make the page feel pinned by default.

3. State changes with IntersectionObserver

The MDN guide for IntersectionObserver is still the best practical starting point for section activation, chapter progress, and state changes that do not need continuous scroll coupling.

4. Scroll timelines only for continuous progress

The W3C Scroll Animations specification is useful when you need continuous scroll-linked progress, but that should be the last layer, not the first.

Choose the right pattern

PatternBest use caseMobile riskPerformance risk
Narrative railLong editorial or case-study pagesMediumLow to medium
Progress stageOne visual tied to chapter progressMediumMedium
Chapter stackDistinct sections with controlled activationLow to mediumLow
Hybrid narrativeSticky media plus local animated detailsHighHigh

Use the simplest pattern that communicates the story.

IntersectionObserver vs scroll timelines

ApproachBest forStrengthTrade-off
IntersectionObserverSection state, chapter activation, discrete transitionsSimple, robust, easier to reason aboutLess suited for continuous animation progress
Scroll timelinesContinuous scroll-linked progressExpressive and direct for progress mappingHigher compatibility and performance sensitivity

Use observers by default. Reach for scroll timelines only when the narrative genuinely depends on continuous progress.

Mobile constraints and anti-patterns

Mobile is where weak scrollytelling architecture usually fails first.

Watch for:

  • sticky regions that consume too much viewport height
  • multiple competing animated layers
  • sections that trap scrolling
  • text that becomes secondary to motion

The mobile version should usually be simpler than the desktop one, not equally elaborate.

Performance budget for scrollytelling

Treat performance as part of the narrative. If the reader feels lag, they feel uncertainty.

Keep the budget tight:

  • animate as little as possible
  • avoid layout-heavy effects on scroll
  • prefer discrete state changes over constant motion
  • test under weaker devices and real touch scrolling

This is why the best companion read for this topic is Performance as product quality.

Accessibility and reduced motion

Scrollytelling should not require motion to preserve meaning.

Use these defaults:

  • keep the information readable without the animation
  • simplify or remove continuous motion for reduced-motion users
  • preserve keyboard and screen-reader access to the same content

Implementation checklist

  • does the story still work as plain content?
  • is sticky behavior used sparingly and intentionally?
  • are observers enough, or is continuous scroll progress truly necessary?
  • does the mobile version reduce complexity instead of copying desktop behavior?
  • is reduced motion respected?
  • can the page stay smooth on real devices and long pages?
  • does the motion improve comprehension instead of competing with the content?

If the answer to the last question is no, use a normal page.

For motion patterns that clarify state changes, read Frontend animation with intent. For the perceived-quality and performance side of the same problem, read Performance as product quality. For clarity and confidence in interface behavior, read Designing trust into interfaces.

Need help applying this?

Turn the trade-off into a practical product decision.

If you need a narrative product page, launch page, or case-study experience that uses motion without hurting readability or speed, see the work on get in touch or reach out here.

FAQ

Common questions before committing to the pattern.

What is the safest way to build scrollytelling?+

Start with semantic content and add motion as progressive enhancement. The page should still work without the animation layer.

Should I use IntersectionObserver or scroll-driven animations?+

Use IntersectionObserver by default for section state and activation. Use scroll-driven animation only when the story genuinely needs continuous progress tied to scroll.

Why does scrollytelling often feel bad on mobile?+

Because sticky regions, heavy motion, and constrained viewport space combine badly when the design is not simplified for smaller screens.

How do I avoid scroll jank?+

Keep the motion budget low, prefer discrete state changes, test on real devices, and avoid effects that make scrolling compete with layout work.

When should I skip scrollytelling entirely?+

Skip it when progressive revelation does not improve understanding. A normal page is often clearer, faster, and easier to maintain.