@cran/vue.use
Version:
Cranberry Vue Use Utilities
32 lines (31 loc) • 841 B
JavaScript
import { ref } from "@vue/runtime-dom";
import { tryOnActivated, tryOnDeactivated, tryOnUnmounted } from "../utility/lifecycle";
export function useRepeat(setup, clear, handler, { paused = false, } = {}) {
const active = ref(!paused);
let frame = null;
function loop(...args) {
if (active.value) {
handler(...args);
frame = setup(loop);
}
}
function resume() {
if (!active.value) {
active.value = true;
frame = setup(loop);
}
}
function pause() {
active.value = false;
if (null !== frame) {
clear(frame);
}
}
if (active.value) {
frame = setup(loop);
}
tryOnUnmounted(pause);
tryOnActivated(resume);
tryOnDeactivated(pause);
return { active, resume, pause, };
}