vuux
Version:
Vue3 Nuxt3 Nuxt4 组件库
28 lines (27 loc) • 925 B
JavaScript
import { computed as h, ref as d, nextTick as A, onMounted as W, onBeforeUnmount as F } from "vue";
import { Utils as M } from "@vuux/utils";
const y = (f, n, i) => {
const m = h(() => f.speed), e = d(0);
let t = null, l = 0, s = 0, o = !1;
const r = d(!1), u = () => {
o || (e.value -= m.value, e.value <= -l && (e.value = s)), t = requestAnimationFrame(u);
}, c = () => {
t !== null && (cancelAnimationFrame(t), t = null);
}, p = () => o = !0, b = () => o = !1, v = M.debounce(async () => {
c(), await A(), !(!n.value || !i.value) && (l = i.value.offsetWidth, s = n.value.offsetWidth, e.value = s, r.value = !0, t = requestAnimationFrame(u));
}, 50);
let a;
return W(() => {
v(), a = new ResizeObserver(v), n.value && a.observe(n.value);
}), F(() => {
c(), a && a.disconnect();
}), {
translateX: e,
ready: r,
pause: p,
resume: b
};
};
export {
y as useMarquee
};