mirror of
https://github.com/ether/etherpad-lite.git
synced 2026-07-23 01:57:06 +00:00
* Added vite react admin ui. * Added react i18next. * Added pads manager. * Fixed docker build. * Fixed windows build. * Fixed installOnWindows script. * Install only if path exists.
29 lines
No EOL
845 B
TypeScript
29 lines
No EOL
845 B
TypeScript
import {useCallback, useEffect, useRef} from "react";
|
|
|
|
type Args = any[]
|
|
|
|
export const useAnimationFrame = <Fn extends (...args: Args)=>void>(
|
|
callback: Fn,
|
|
wait = 0
|
|
): ((...args: Parameters<Fn>)=>void)=>{
|
|
const rafId = useRef(0)
|
|
const render = useCallback(
|
|
(...args: Parameters<Fn>)=>{
|
|
cancelAnimationFrame(rafId.current)
|
|
const timeStart = performance.now()
|
|
|
|
const renderFrame = (timeNow: number)=>{
|
|
if(timeNow-timeStart<wait){
|
|
rafId.current = requestAnimationFrame(renderFrame)
|
|
return
|
|
}
|
|
callback(...args)
|
|
}
|
|
rafId.current = requestAnimationFrame(renderFrame)
|
|
}, [callback, wait]
|
|
)
|
|
|
|
|
|
useEffect(()=>cancelAnimationFrame(rafId.current),[])
|
|
return render
|
|
} |