Lenis reads your scroll like a mainspring reads a hand — smoothing raw input into steady motion. GSAP's ScrollTrigger is the escapement, releasing each animation exactly on beat. Scroll to see the mechanism run.
Browsers snap to the wheel event immediately. That's correct for reading text — and wrong for a page that wants to feel directed.
Every scroll input is smoothed through an easing curve before it touches the page — the same principle as a mainspring evening out hand torque.
Each element declares a start and end point in the scroll timeline. Cross it, and a tween fires — pin, fade, translate, scrub.
You haven't scrolled the page — you've scrolled through a fixed frame, four beats wide, then handed back to normal flow.
~3kb, zero dependencies. It hijacks the scroll event, replays it with easing, and exposes a clean progress value everything else can hook into.
Free since Webflow's acquisition of GreenSock. Handles pins, scrubs, and reveals — the part that makes a page feel directed rather than just long.
Check it, and skip the hijacking entirely for anyone who's opted out. The mechanism should be a choice, not a tax.
lenis + gsap · scrolltrigger · reduced-motion respected