40 lines
1.3 KiB
JavaScript
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;
|