mine-h5-ui
Version:
一款轻量级、模块化基于 Vue3.x 的 H5 前端 UI 组件库 👍
43 lines (42 loc) • 1.4 kB
JavaScript
import { useTemplateRef as v, ref as f, computed as m, onMounted as h, onUnmounted as g } from "vue";
/*!
* mine-h5-ui v2.15.0
* Copyright (c) 2025 biaov
* @license MIT
*/
const B = (n) => {
const s = v("indexBarRef"), r = f(n.list[0].name), i = f();
let c;
const u = (l) => {
const { scrollTop: e } = l.target, o = c[0];
if (e >= o.offsetTop)
for (let t = 0; t < c.length; t++) {
const a = c[t];
if (a.nodeName === "LI" && e > o.offsetTop && e < a.offsetTop) {
r.value = c[t - 1].children[0].children[0].innerHTML;
break;
}
}
else
r.value = n.list[0].name;
}, d = m(() => (l) => {
const e = n.list.findIndex((a) => a.name === r.value);
if (e < 0) return !1;
const o = n.range, t = ~~(o / 2) + 1;
return e < t ? l < o : e > n.list.length - (t + 1) ? l > n.list.length - (o + 1) : l < e + t && l > e - t;
});
return h(() => {
c = i.value.children, s.value && s.value.addEventListener("scroll", u);
}), g(() => {
s.value && s.value.removeEventListener("scroll", u);
}), { curLetter: r, listCont: i, filterShow: d, onClickBadge: (l, e) => {
const { offsetTop: o } = c[e];
r.value = l.name, s.value.scrollTo({ top: o });
} };
}, k = (n) => ({ handleLi: (r) => {
n("click", { ...r });
} });
export {
k as useBtns,
B as useScroll
};