Files
NapCatQQ/.pnpm-store/v3/files/d1/276a9556cf6c58b76b58027b2e5ce29e0fe571872cbd5fc6226b97abe760bf16da1b9b88ddb2e6f6449db55701286e96cc69af3089722200c68b746d55c573
TanTan e311ca3275
Build NapCat Artifacts / Windows Loader Test (push) Canceled after 0s
Build NapCat Artifacts / Type Check & Test (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Framework (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Shell (push) Canceled after 0s
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

59 lines
1.7 KiB
Plaintext

import { useCallback, useEffect, useRef } from 'react';
import useLatest from '../useLatest';
import { isNumber } from '../utils';
var setRafInterval = function (callback, delay) {
if (delay === void 0) { delay = 0; }
if (typeof requestAnimationFrame === 'undefined') {
return {
id: setInterval(callback, delay),
};
}
var start = Date.now();
var handle = {
id: 0,
};
var loop = function () {
var current = Date.now();
if (current - start >= delay) {
callback();
start = Date.now();
}
handle.id = requestAnimationFrame(loop);
};
handle.id = requestAnimationFrame(loop);
return handle;
};
var cancelAnimationFrameIsNotDefined = function (t) {
return typeof cancelAnimationFrame === 'undefined';
};
var clearRafInterval = function (handle) {
if (cancelAnimationFrameIsNotDefined(handle.id)) {
return clearInterval(handle.id);
}
cancelAnimationFrame(handle.id);
};
function useRafInterval(fn, delay, options) {
var immediate = options === null || options === void 0 ? void 0 : options.immediate;
var fnRef = useLatest(fn);
var timerRef = useRef(undefined);
var clear = useCallback(function () {
if (timerRef.current) {
clearRafInterval(timerRef.current);
}
}, []);
useEffect(function () {
if (!isNumber(delay) || delay < 0) {
return;
}
if (immediate) {
fnRef.current();
}
timerRef.current = setRafInterval(function () {
fnRef.current();
}, delay);
return clear;
}, [delay]);
return clear;
}
export default useRafInterval;