Inertial scrolling

JavaScript easing the page's scroll position so it glides and coasts, a heavier authored version of the momentum touch scrolling already has.

smooth scroll with lerpheavy buttery scroll like award sitesmomentum scrollingintertial scrollinglenis scrollsmooth scrollingscroll smoothinglocomotive scroll effectthe page keeps gliding after you stop scrollingscroll that feels weighted and slow to stop

See it

Live demo coming soon

What it is

Touch and trackpad scrolling already has inertia built in: you flick, the page keeps going and decays to a stop. What people usually mean by this term on the web is the authored version, better called scroll smoothing: JavaScript keeps a target scroll position and eases the actual position toward it every frame (a lerp), so wheel and keyboard input get that same glide, tuned heavier than the platform default. That extra weight is most of what makes Awwwards-style sites feel expensive.

In practice you reach for a library: Lenis is the current default, Locomotive Scroll the older one, and GSAP's ScrollSmoother the paid option. Two knobs do the work: the lerp factor (how much of the gap you close per frame, roughly 0.05 to 0.12) and the wheel multiplier. Lower lerp equals heavier glide. Anything under about 0.04 stops feeling smooth and starts feeling broken.

Gotchas, and there are real ones. The old transform-based smoothers (classic Locomotive) translated a wrapper instead of scrolling the page, so the visual position disagreed with the browser's real scroll offset and sticky positioning, IntersectionObserver, and anchor links all went wrong. Lenis-style libraries drive the native scroll position instead, so most of that keeps working, but you still hand the library the rAF loop and route anchor jumps through its own scrollTo. Either way, find-in-page and keyboard scrolling feel sluggish, some people get motion sick, and trackpad users already have momentum, so you are stacking easing on easing. Always kill it under 'prefers-reduced-motion'.

Ask AI for it

Add JavaScript scroll smoothing to the page using Lenis: initialize it on mount, drive it from a requestAnimationFrame loop, and use a lerp of about 0.08 so the page keeps gliding briefly after the wheel stops. Route anchor links through lenis.scrollTo() instead of native hash jumps, sync any scroll-triggered reveals to the Lenis scroll event, and disable the whole thing (falling back to native scrolling) when prefers-reduced-motion is set. Clean up the instance on unmount.

You might have meant

scroll snapparallaxscroll linked animationinertia animationscroll velocity skew