@cran/vue.use
Version:
Cranberry Vue Use Utilities
26 lines (25 loc) • 699 B
JavaScript
import { ref } from "@vue/runtime-dom";
export function useTimeline(sequence, initial, { loop = false, }) {
const container = ref(initial);
const length = sequence.length;
let index = 0;
let v = null;
function resume() {
if (loop || index < length) {
const [delay, value,] = sequence[(++index) % length];
v = setTimeout(function onNext() {
container.value = value;
resume();
}, delay);
}
}
function pause() {
if (v) {
clearTimeout(v);
--index;
v = null;
}
}
resume();
return Object.assign(container, { pause, resume, });
}