1
0
Fork 0
react-playground/node_modules/@mui/x-internals/esm/rafThrottle/rafThrottle.js
Techognito fc0f69dacb Added Statistics calculation
Statistics now show calculated values
2025-09-04 17:30:00 +02:00

33 lines
No EOL
765 B
JavaScript

/**
* Creates a throttled function that only invokes `fn` at most once per animation frame.
*
* @example
* ```ts
* const throttled = rafThrottle((value: number) => console.log(value));
* window.addEventListener('scroll', (e) => throttled(e.target.scrollTop));
* ```
*
* @param fn Callback function
* @return The `requestAnimationFrame` throttled function
*/
export function rafThrottle(fn) {
let lastArgs;
let rafRef;
const later = () => {
rafRef = null;
fn(...lastArgs);
};
function throttled(...args) {
lastArgs = args;
if (!rafRef) {
rafRef = requestAnimationFrame(later);
}
}
throttled.clear = () => {
if (rafRef) {
cancelAnimationFrame(rafRef);
rafRef = null;
}
};
return throttled;
}