blob: 54b1e662357762367fc8abc8527043a233846647 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import { useEffect, useRef } from "react";
export function useRafLoop(callback: ({ time }: { time: number }) => void) {
const requestRef = useRef<number>(0);
const previousTimeRef = useRef<number | null>(null);
useEffect(() => {
const loop = ({ time }: { time: number }) => {
if (previousTimeRef.current !== null) {
const deltaTime = time - previousTimeRef.current;
callback({ time: deltaTime });
}
previousTimeRef.current = time;
requestRef.current = requestAnimationFrame((time) => loop({ time }));
};
requestRef.current = requestAnimationFrame((time) => loop({ time }));
return () => cancelAnimationFrame(requestRef.current);
}, [callback]);
}
|