Skip to content

Rule · Smoothness

Non-passive wheel/touch listener

smooth/scroll-listener-nonpassivewarnvoid smoothupdated

Why it matters

A non-passive wheel or touchmove listener forces the browser to wait for JavaScript before it can scroll, so every scroll gesture starts late.

How to fix it

Pass { passive: true } unless you truly need preventDefault(); for scroll effects prefer IntersectionObserver or animation-timeline: view().

Example

ts
addEventListener('touchmove', onMove, { passive: true });

void smooth reports 13 rules in this category. How the page feels after it loads: dropped frames during a scripted scroll, long animation frames, INP of real clicks, shifts after input, animated layout properties, idle rAF loops and reduced-motion handling.