UNPKG

@lesnoypudge/utils-react

Version:

lesnoypudge's utils-react

32 lines (31 loc) 801 B
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