react-use
Version:
Collection of React Hooks
38 lines (37 loc) • 1.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = require("react");
var useRaf = function (ms, delay) {
if (ms === void 0) { ms = 1e12; }
if (delay === void 0) { delay = 0; }
var _a = react_1.useState(0), elapsed = _a[0], set = _a[1];
react_1.useLayoutEffect(function () {
var raf;
var timerStop;
var start;
var onFrame = function () {
var time = Math.min(1, (Date.now() - start) / ms);
set(time);
loop();
};
var loop = function () {
raf = requestAnimationFrame(onFrame);
};
var onStart = function () {
timerStop = setTimeout(function () {
cancelAnimationFrame(raf);
set(1);
}, ms);
start = Date.now();
loop();
};
var timerDelay = setTimeout(onStart, delay);
return function () {
clearTimeout(timerStop);
clearTimeout(timerDelay);
cancelAnimationFrame(raf);
};
}, [ms, delay]);
return elapsed;
};
exports.default = useRaf;