Files

40 lines
1.3 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var react_1 = require("react");
var useIsomorphicLayoutEffect_1 = tslib_1.__importDefault(require("./useIsomorphicLayoutEffect"));
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];
useIsomorphicLayoutEffect_1.default(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;