| Server IP : 162.144.4.212 / Your IP : 216.73.216.50 Web Server : Apache System : Linux gator2125.hostgator.com 4.19.286-203.ELK.el7.x86_64 #1 SMP Wed Jun 14 04:33:55 CDT 2023 x86_64 User : cozeellc ( 2980) PHP Version : 8.3.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home4/cozeellc/public_html/wp-content/plugins/jetpack/extensions/shared/ |
Upload File : |
import { useCallback, useEffect, useRef } from '@wordpress/element';
interface RafHandle {
id: number;
}
const setRafInterval = ( callback: () => void, timeout: number = 0 ) => {
const interval = timeout < 0 ? 0 : timeout;
const handle: RafHandle = {
id: 0,
};
let startTime = Date.now();
const loop = () => {
const nowTime = Date.now();
if ( nowTime - startTime >= interval ) {
startTime = nowTime;
callback();
}
handle.id = requestAnimationFrame( loop );
};
handle.id = requestAnimationFrame( loop );
return handle;
};
const clearRafInterval = ( handle?: RafHandle | null ) => {
if ( handle ) {
cancelAnimationFrame( handle.id );
}
};
/**
* Invoke a function on an interval that uses requestAnimationFrame.
*
* @param {Function} callback - Function to invoke
* @param {number} timeout - Interval timout in MS.
*
* @returns {Function} Function to clear the interval.
*/
const useRafInterval = ( callback: () => void, timeout = 0 ) => {
const timerRef = useRef< RafHandle >();
const callbackRef = useRef( callback );
callbackRef.current = callback;
useEffect( () => {
timerRef.current = setRafInterval( () => {
callbackRef.current();
}, timeout );
return () => {
clearRafInterval( timerRef.current );
};
}, [ timeout ] );
const clear = useCallback( () => {
clearRafInterval( timerRef.current );
}, [] );
return clear;
};
export default useRafInterval;