Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 31x 31x 31x 31x 4x 31x 8x 8x 6x 6x 4x 4x | import sync, { cancelSync, FrameData } from "framesync"
import { useEffect } from "react"
import { useConstant } from "./use-constant"
export type FrameCallback = (timestamp: number) => void
const getCurrentTime =
typeof performance !== "undefined"
? () => performance.now()
: () => Date.now()
export function useAnimationFrame(callback: FrameCallback) {
const initialTimestamp = useConstant(getCurrentTime)
useEffect(() => {
const provideTimeSinceStart = ({ timestamp }: FrameData) => {
callback(timestamp - initialTimestamp)
}
sync.update(provideTimeSinceStart, true)
return () => cancelSync.update(provideTimeSinceStart)
}, [callback])
}
|