rvx
Version:
A signal based rendering library
72 lines • 1.69 kB
JavaScript
import { capture, teardown } from "../core/lifecycle.js";
export function useMicrotask(callback) {
let active = true;
let dispose;
teardown(() => {
active = false;
dispose?.();
});
queueMicrotask(() => {
if (active) {
dispose = capture(callback);
if (!active) {
dispose?.();
}
}
});
}
export function useTimeout(callback, timeout) {
let active = true;
let dispose;
let handle;
teardown(() => {
active = false;
clearTimeout(handle);
dispose?.();
});
handle = setTimeout(() => {
dispose = capture(callback);
if (!active) {
dispose();
}
}, timeout);
}
export function useInterval(callback, interval) {
let active = true;
let dispose;
let handle;
teardown(() => {
active = false;
clearInterval(handle);
dispose?.();
});
handle = setInterval(() => {
dispose?.();
dispose = undefined;
dispose = capture(callback);
if (!active) {
dispose();
}
}, interval);
}
export function useAnimation(callback) {
let active = true;
let dispose;
let handle;
teardown(() => {
active = false;
cancelAnimationFrame(handle);
dispose?.();
});
handle = requestAnimationFrame(function next(now) {
handle = requestAnimationFrame(next);
dispose?.();
dispose = undefined;
dispose = capture(() => callback(now));
if (!active) {
dispose();
dispose = undefined;
}
});
}
//# sourceMappingURL=timers.js.map