import { w as withInstall } from "../badge/index2.js"; import { defineComponent, ref, reactive, onMounted, nextTick, onUnmounted, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode, renderSlot, withModifiers } from "vue"; var index = /* @__PURE__ */ (() => ".layui-scroll{height:100%;overflow:hidden!important}.layui-scroll-y{position:relative;height:100%}.layui-scroll-y .layui-scroll-wrap{height:100%;overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none}.layui-scroll-y .layui-scroll-track{position:absolute;top:0;right:0;bottom:0;border-radius:8px;z-index:20}.layui-scroll-y .layui-scroll-track .layui-scroll-thumb{margin:0 auto;border-radius:6px;cursor:default}.layui-scroll-y ::-webkit-scrollbar{display:none}\n")(); const _hoisted_1 = { class: "layui-scroll-y" }; const _hoisted_2 = ["onMousedown"]; const __default__ = { name: "LayScroll" }; const _sfc_main = defineComponent({ ...__default__, props: { height: { default: "100%" }, trackColor: { default: "rgba(0,0,0,0)" }, thumbColor: { default: "#eeeeee" }, thumbWidth: { default: 6 } }, emits: ["arrive"], setup(__props, { emit }) { const scrollRef = ref(); const barRef = ref(); const data = reactive({ translateY: 0, heightPre: 0, barHeight: 0, winWidth: document.body.clientWidth }); let time; let isMove = false; let moveClientY = 0; let trackHeight = 0; let wrapHeight = 0; let wrapContentHeight = 0; onMounted(() => { monitorWindow(); monitorScrollBar(); nextTick(() => { calculationLength(); }); }); onUnmounted(() => { window.clearInterval(time); }); const monitorWindow = function() { let time2; window.addEventListener("resize", () => { data.winWidth = document.body.clientWidth; clearTimeout(time2); time2 = setTimeout(() => { initScrollListner(); }, 500); }); }; const monitorScrollBar = function() { let MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; const observer = new MutationObserver((mutations) => { initScrollListner(); }); observer.observe(scrollRef.value, { attributes: true, childList: true, subtree: true }); }; const calculationLength = function() { time = setInterval(() => { initScrollListner(); }, 50); setTimeout(() => { window.clearInterval(time); }, 2e3); }; const initScrollListner = function() { let scroll = scrollRef.value; let bar = barRef.value; if (scroll && bar) { wrapContentHeight = scroll.scrollHeight; wrapHeight = scroll.clientHeight; trackHeight = bar.clientHeight; data.heightPre = wrapHeight / wrapContentHeight; data.barHeight = data.heightPre * trackHeight; } }; const onMosewheel = (e) => { data.translateY = e.target.scrollTop * data.heightPre; if (data.translateY == 0) { arrive("top"); } else if (e.target.scrollTop + e.target.offsetHeight == e.target.scrollHeight) { arrive("bottom"); } }; const arrive = (tb) => { emit("arrive", tb); }; const moveStart = (e) => { isMove = true; moveClientY = e.clientY - data.translateY; moveTo(); moveEnd(); }; const moveTo = () => { document.onmousemove = (e) => { if (isMove) { if (e.clientY - moveClientY > trackHeight - data.barHeight) { data.translateY = trackHeight - data.barHeight; } else if (e.clientY - moveClientY < 0) { data.translateY = 0; } else { data.translateY = e.clientY - moveClientY; } if (scrollRef.value) { scrollRef.value.scrollTop = data.translateY / data.heightPre; } } }; }; const moveEnd = function() { document.onmouseup = (e) => { if (isMove) { isMove = false; } }; }; return (_ctx, _cache) => { return openBlock(), createElementBlock("div", { class: normalizeClass(["layui-scroll", { hide: data.winWidth < 500 }]), style: normalizeStyle({ height: __props.height }) }, [ createElementVNode("div", _hoisted_1, [ createElementVNode("div", { ref_key: "scrollRef", ref: scrollRef, class: "layui-scroll-wrap", onScroll: onMosewheel }, [ renderSlot(_ctx.$slots, "default") ], 544), createElementVNode("div", { ref_key: "barRef", ref: barRef, class: "layui-scroll-track", style: normalizeStyle({ backgroundColor: data.heightPre == 1 ? "transparent" : __props.trackColor }) }, [ createElementVNode("div", { style: normalizeStyle({ height: data.barHeight + "px", width: __props.thumbWidth + "px", transform: "translateY(" + data.translateY + "px)", backgroundColor: data.heightPre == 1 ? "transparent" : __props.thumbColor }), class: "layui-scroll-thumb", onMousedown: withModifiers(moveStart, ["stop", "prevent"]) }, null, 44, _hoisted_2) ], 4) ]) ], 6); }; } }); const component = withInstall(_sfc_main); export { _sfc_main as _, component as c };