Server IP : 209.38.156.173 / Your IP : 216.73.216.122 [ Web Server : Apache/2.4.52 (Ubuntu) System : Linux lakekumayuhotel 5.15.0-136-generic #147-Ubuntu SMP Sat Mar 15 15:53:30 UTC 2025 x86_64 User : root ( 0) PHP Version : 8.1.2-1ubuntu2.22 Disable Function : NONE Domains : 2 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /proc/1534260/cwd/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;