@lesnoypudge/utils-react
Version:
lesnoypudge's utils-react
32 lines (31 loc) • 801 B
JavaScript
import { useRef, useLayoutEffect } from "react";
import { useFunction } from "../useFunction/useFunction.js";
const useAnimationFrame = (callback, enabled) => {
const frameIdRef = useRef(0);
const isRunningRef = useRef(false);
const stop = useFunction(() => {
isRunningRef.current = false;
cancelAnimationFrame(frameIdRef.current);
});
const start = useFunction(() => {
isRunningRef.current = true;
frameIdRef.current = requestAnimationFrame((time) => {
if (!isRunningRef.current) return;
callback(time);
start();
});
});
useLayoutEffect(() => {
if (!enabled) return;
start();
return stop;
}, [enabled, start, stop]);
return {
start,
stop
};
};
export {
useAnimationFrame
};
//# sourceMappingURL=useAnimationFrame.js.map