mine-h5-ui
Version:
一款轻量级、模块化基于 Vue3.x 的 H5 前端 UI 组件库 👍
45 lines (44 loc) • 1.22 kB
JavaScript
import { ref as c, watch as m, onMounted as h } from "vue";
const p = (e) => {
const s = c(), l = c(0), a = c(Array.isArray(e.list) ? e.list : [e.list]), t = c(0);
let r, d = !0;
const u = () => {
if (e.scroll === "horizontal") {
const { offsetWidth: n, parentNode: o } = s.value;
let i;
const f = (v) => {
i === void 0 && (i = v);
const k = v - i;
l.value < -n ? (l.value = o.offsetWidth, i = void 0) : l.value = ~(k / 18), d && window.requestAnimationFrame(f);
};
window.requestAnimationFrame(f);
} else {
const n = a.value.length;
if (n <= 1) return;
r = setInterval(() => {
const o = t.value;
t.value = o >= n - 1 ? 0 : o + 1;
}, e.delay);
}
}, A = () => {
e.scroll === "horizontal" ? d = !1 : clearInterval(r);
};
return m(
() => e.loop,
(n) => {
n ? u() : A();
}
), h(() => {
e.loop && u();
}), { noticeList: s, left: l, listData: a, listIndex: t };
}, x = (e) => ({ onClick: (t) => {
e("click", t);
}, onClickPreappend: (t) => {
e("click:preappend", t);
}, onClickAppend: (t) => {
e("click:append", t);
} });
export {
p as useAnimate,
x as useBtns
};