Skip to content

animationFrameDebounce ​

Wraps a zero-argument callback so repeated calls collapse into a single call on the next animation frame. Each call cancels the previously scheduled frame, so the callback runs at most once per frame. On the server (where requestAnimationFrame is unavailable) it returns a no-op and the callback never runs.

Importing ​

ts
import { animationFrameDebounce } from '@basmilius/utils';

Usage ​

ts
import { animationFrameDebounce } from '@basmilius/utils';

const render = animationFrameDebounce(() => {
    element.style.transform = `translateY(${window.scrollY}px)`;
});

window.addEventListener('scroll', render);
// Many scroll events, one layout write per frame.

Parameters ​

NameTypeDescription
fnTThe zero-argument callback to debounce to a single call per animation frame.

Returns ​

T a wrapper with the same signature as fn. Calling it schedules fn on the next animation frame, cancelling any frame scheduled by an earlier call.

Type signature ​

ts
declare function animationFrameDebounce<T extends () => void | Promise<void>>(fn: T): T;

See also ​