russellsamora/scrollama

Scrollytelling with IntersectionObserver.

View on GitHub ↗Jump to charts ↓

Summary Information

Updated 3 minutes ago
Added to GitGenius on September 11th, 2026
Created on October 20th, 2017
Open Issues & Pull Requests: 11 (+0)
GitHub issues: Enabled
Number of forks: 292
Total Stargazers: 6,003 (+0)
Total Subscribers: 87 (+0)

Repository Insights (GitGenius)

Median issue/PR response: 20.8 days
Mean response time: 20.8 days
90th percentile: 20.8 days
Tracked items: 1

Most active contributors

Sign in to see contributor activity.

Related repositories by overlapping contributors

No overlapping-contributor repos identified yet.

Charts & Analytics

Fetching additional details & charts...

Issue Activity (beta)

Open issues: 1
New in 7 days: 0
Closed in 7 days: 0
Avg open age: 1,287 days
Stale 30+ days: 1
Stale 90+ days: 1

Recent activity

Opened in 7 days: 0
Closed in 7 days: 0
Comments in 7 days: 0
Events in 7 days: 0

Top labels

No label distribution available yet.

Most active issues this week

No issue events were indexed in the last 7 days.

Detailed Description

Scrollama is a JavaScript library for scrollytelling that uses IntersectionObserver to detect when elements enter the viewport.

Scrollytelling—coordinating narrative text with animated graphics as users scroll—is difficult to implement performantly. Scrollama solves this by replacing scroll event listeners with IntersectionObserver, which fires callbacks when tracked elements enter or leave the viewport. This approach is more efficient because the browser handles position detection natively rather than recalculating on every scroll frame. The library provides a simple interface for defining steps (typically text sections) and triggering callbacks at specific scroll positions, allowing developers to update graphics or other content in response.

Scrollama suits projects that need scroll-driven interactives with minimal overhead. It works well for narrative-driven visualizations, data stories, and long-form content where graphics should update as readers scroll through text. The library is framework-agnostic and works with D3, React, or vanilla JavaScript. Developers should be aware that IntersectionObserver support varies across browsers; the library no longer includes a polyfill, so you must add one yourself if targeting older environments. The tool supports sticky graphics using CSS position properties, custom offsets per step via data attributes, and automatic resize handling through resize observers.

The project underwent significant refactoring in version 3.0 to simplify the codebase and improve maintainability. Built-in resize observer support and per-step custom offsets were added as new capabilities. The deprecated order option was removed, and earlier versions had deprecated container enter/exit callbacks in favor of CSS sticky positioning. The library maintains a stable API while evolving its internal architecture to ease future maintenance and feature development.