@extclp/vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 16 kB
Source Map (JSON)
{"version":3,"file":"scrollbar.vue2.mjs","sources":["../../../components/scrollbar/scrollbar.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport {\r\n computed,\r\n getCurrentInstance,\r\n nextTick,\r\n onBeforeUnmount,\r\n onMounted,\r\n ref,\r\n toRef,\r\n watch,\r\n watchEffect,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useManualRef, useRtl, useSetTimeout } from '@vexip-ui/hooks'\r\nimport { USE_TOUCH, boundRange, isDefined, throttle } from '@vexip-ui/utils'\r\nimport { scrollbarProps } from './props'\r\nimport { useTrack } from './hooks'\r\nimport { ScrollbarType, scrollbarPlacements } from './symbol'\r\n\r\ndefineOptions({ name: 'Scrollbar' })\r\n\r\nconst _props = defineProps(scrollbarProps)\r\nconst props = useProps('scrollbar', _props, {\r\n placement: {\r\n default: 'right',\r\n validator: value => scrollbarPlacements.includes(value),\r\n },\r\n scroll: {\r\n default: 0,\r\n validator: value => value >= 0 && value <= 100,\r\n static: true,\r\n },\r\n barLength: {\r\n default: 35,\r\n validator: value => value > 0 && value < 100,\r\n },\r\n width: null,\r\n appear: false,\r\n fade: 1500,\r\n barColor: null,\r\n trackColor: null,\r\n disabled: false,\r\n wrapper: null,\r\n duration: null,\r\n useTrack: false,\r\n trackSpeed: {\r\n default: 2,\r\n validator: value => value > 0 && value < 10,\r\n },\r\n})\r\n\r\nconst nh = useNameHelper('scrollbar')\r\nconst active = ref(false)\r\nconst scrolling = ref(false)\r\n\r\nconst { manualRef, triggerUpdate } = useManualRef()\r\n\r\nconst { isRtl } = useRtl()\r\n\r\nconst currentScroll = manualRef(props.scroll)\r\n\r\nconst container = ref<HTMLElement>()\r\nconst bar = ref<HTMLElement>()\r\nconst track = ref<HTMLElement>()\r\n\r\nconst { timer } = useSetTimeout()\r\n\r\nconst type = computed(() => {\r\n return props.placement === 'right' || props.placement === 'left'\r\n ? ScrollbarType.VERTICAL\r\n : ScrollbarType.HORIZONTAL\r\n})\r\n\r\nconst { tracking, handleMouseDown: handleTrackMouseDown } = useTrack({\r\n currentScroll,\r\n track,\r\n bar,\r\n type,\r\n trackSpeed: toRef(props, 'trackSpeed'),\r\n barLength: toRef(props, 'barLength'),\r\n disabled: toRef(props, 'disabled'),\r\n onDown: scroll => {\r\n clearTimeout(timer.fade)\r\n emitEvent(props.onScrollStart, scroll)\r\n },\r\n // onMove: () => clearTimeout(timer.fade),\r\n onUp: scroll => {\r\n setScrollbarFade()\r\n triggerUpdate()\r\n emitEvent(props.onScrollEnd, scroll)\r\n },\r\n onScroll: scroll => {\r\n triggerUpdate()\r\n emitEvent(props.onScroll, scroll)\r\n },\r\n})\r\n\r\nconst className = computed(() => {\r\n return [\r\n nh.b(),\r\n nh.bs('vars'),\r\n nh.bm(props.placement),\r\n {\r\n [nh.bm('inherit')]: props.inherit,\r\n [nh.bm('fade')]: props.fade,\r\n [nh.bm('scrolling')]: scrolling.value,\r\n [nh.bm('tracking')]: tracking.value,\r\n [nh.bm('active')]: active.value,\r\n [nh.bm('disabled')]: props.disabled,\r\n },\r\n ]\r\n})\r\nconst style = computed<Record<string, string>>(() => {\r\n return {\r\n [nh.cv('bar-bg-color')]: props.barColor,\r\n [nh.cv('track-bg-color')]: props.trackColor,\r\n [nh.cv('width')]: props.width ? `${props.width}px` : null!,\r\n }\r\n})\r\n\r\nwatch(\r\n () => props.scroll,\r\n value => {\r\n currentScroll.value = value\r\n triggerUpdate()\r\n },\r\n)\r\nwatchEffect(() => {\r\n if (!bar.value) return\r\n\r\n const position = `${((100 - props.barLength) * currentScroll.value) / props.barLength}%`\r\n const length = `${props.barLength}%`\r\n\r\n if (type.value === ScrollbarType.VERTICAL) {\r\n bar.value.style.height = length\r\n bar.value.style.transform = `translate3d(0, ${position}, 0)`\r\n } else {\r\n bar.value.style.width = length\r\n bar.value.style.transform = `translate3d(${isRtl.value ? '-' : ''}${position}, 0, 0)`\r\n }\r\n})\r\nwatchEffect(() => {\r\n if (!bar.value) return\r\n\r\n bar.value.style.transitionDuration =\r\n isDefined(props.duration) && props.duration >= 0 ? `${props.duration}ms` : ''\r\n})\r\n\r\nif (props.appear) {\r\n watch(currentScroll, () => {\r\n clearTimeout(timer.fade)\r\n active.value = true\r\n\r\n if (!scrolling.value && !tracking.value) {\r\n setScrollbarFade()\r\n }\r\n })\r\n}\r\n\r\nconst handleWrapperMouseMove = throttle(() => {\r\n clearTimeout(timer.fade)\r\n\r\n if (props.disabled) {\r\n active.value = false\r\n } else {\r\n active.value = true\r\n\r\n if (!scrolling.value && !tracking.value) {\r\n setScrollbarFade()\r\n }\r\n }\r\n})\r\n\r\nlet wrapperElement: HTMLElement | null\r\n\r\nonMounted(() => {\r\n let instance = getCurrentInstance()\r\n\r\n nextTick(() => {\r\n if (typeof props.wrapper === 'string') {\r\n wrapperElement = document.querySelector(props.wrapper)\r\n } else {\r\n wrapperElement = props.wrapper\r\n }\r\n\r\n if (!wrapperElement) {\r\n if (instance?.parent) {\r\n wrapperElement = instance.parent.proxy?.$el\r\n\r\n if (!wrapperElement) {\r\n wrapperElement = container.value?.parentElement ?? null\r\n }\r\n } else {\r\n wrapperElement = container.value?.parentElement ?? null\r\n }\r\n }\r\n\r\n if (wrapperElement && props.fade >= 300) {\r\n wrapperElement.addEventListener('mousemove', handleWrapperMouseMove)\r\n }\r\n\r\n instance = null\r\n\r\n if (!props.appear) {\r\n watch(currentScroll, () => {\r\n clearInterval(timer.fade)\r\n active.value = true\r\n setScrollbarFade()\r\n })\r\n }\r\n })\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n if (wrapperElement) {\r\n wrapperElement.removeEventListener('mousemove', handleWrapperMouseMove)\r\n }\r\n\r\n wrapperElement = null\r\n clearTimeout(timer.fade)\r\n})\r\n\r\ndefineExpose({\r\n currentScroll,\r\n container,\r\n bar,\r\n track,\r\n handleScroll,\r\n})\r\n\r\nlet length: number\r\nlet startAt: number\r\nlet cursorAt: number\r\n\r\nfunction handleMouseDown(event: PointerEvent) {\r\n if (event.button !== 0 || props.disabled) {\r\n return false\r\n }\r\n\r\n event.stopPropagation()\r\n event.preventDefault()\r\n\r\n if (!track.value || !bar.value) return false\r\n\r\n document.addEventListener('pointermove', handleMouseMove)\r\n document.addEventListener('pointerup', handleMouseUp)\r\n\r\n const rect = track.value.getBoundingClientRect()\r\n const barRect = bar.value.getBoundingClientRect()\r\n\r\n if (type.value === ScrollbarType.VERTICAL) {\r\n length = rect.height\r\n startAt = barRect.top - rect.top\r\n cursorAt = event.clientY\r\n } else {\r\n length = rect.width\r\n startAt = isRtl.value ? barRect.right - rect.right : barRect.left - rect.left\r\n cursorAt = event.clientX\r\n }\r\n\r\n clearTimeout(timer.fade)\r\n\r\n scrolling.value = true\r\n emitEvent(props.onScrollStart, currentScroll.value)\r\n}\r\n\r\nfunction handleMouseMove(event: PointerEvent) {\r\n event.stopPropagation()\r\n\r\n if (!USE_TOUCH) {\r\n event.preventDefault()\r\n }\r\n\r\n let position: number\r\n\r\n if (type.value === ScrollbarType.VERTICAL) {\r\n position = startAt + event.clientY - cursorAt\r\n } else {\r\n position = isRtl.value\r\n ? -(startAt + event.clientX - cursorAt)\r\n : startAt + event.clientX - cursorAt\r\n }\r\n\r\n // position / length * 100 === (100 - barLength) * currentScroll / 100\r\n currentScroll.value = (position / length / (100 - props.barLength)) * 1e4\r\n\r\n verifyScroll()\r\n triggerUpdate()\r\n emitEvent(props.onScroll, currentScroll.value)\r\n}\r\n\r\nfunction handleMouseUp(event: PointerEvent) {\r\n event.preventDefault()\r\n\r\n document.removeEventListener('pointermove', handleMouseMove)\r\n document.removeEventListener('pointerup', handleMouseUp)\r\n\r\n setScrollbarFade()\r\n\r\n scrolling.value = false\r\n emitEvent(props.onScrollEnd, currentScroll.value)\r\n}\r\n\r\nfunction verifyScroll() {\r\n currentScroll.value = Math.max(0, Math.min(currentScroll.value, 100))\r\n}\r\n\r\nfunction setScrollbarFade() {\r\n if (props.fade >= 300) {\r\n timer.fade = setTimeout(() => {\r\n active.value = false\r\n }, props.fade)\r\n }\r\n}\r\n\r\nfunction handleScroll(scroll: number) {\r\n if (Math.abs(currentScroll.value - scroll) < 0.0001) return\r\n\r\n currentScroll.value = boundRange(scroll, 0, 100)\r\n triggerUpdate()\r\n}\r\n\r\nfunction disableEvent<E extends Event>(event: E) {\r\n if (event.cancelable) {\r\n event.stopPropagation()\r\n event.preventDefault()\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n ref=\"container\"\r\n :class=\"className\"\r\n role=\"scrollbar\"\r\n :style=\"style\"\r\n >\r\n <div\r\n ref=\"track\"\r\n :class=\"[nh.be('track'), props.useTrack ? null : nh.bem('track', 'disabled')]\"\r\n @touchstart=\"disableEvent\"\r\n @pointerdown=\"handleTrackMouseDown\"\r\n ></div>\r\n <div\r\n ref=\"bar\"\r\n :class=\"nh.be('bar')\"\r\n @touchstart=\"disableEvent\"\r\n @pointerdown=\"handleMouseDown\"\r\n ></div>\r\n </div>\r\n</template>\r\n"],"names":["props","useProps","__props","value","scrollbarPlacements","nh","useNameHelper","active","ref","scrolling","manualRef","triggerUpdate","useManualRef","isRtl","useRtl","currentScroll","container","bar","track","timer","useSetTimeout","type","computed","ScrollbarType","tracking","handleTrackMouseDown","useTrack","toRef","scroll","emitEvent","setScrollbarFade","className","style","watch","watchEffect","position","length","isDefined","handleWrapperMouseMove","throttle","wrapperElement","onMounted","instance","getCurrentInstance","nextTick","_a","_b","_c","onBeforeUnmount","__expose","handleScroll","startAt","cursorAt","handleMouseDown","event","handleMouseMove","handleMouseUp","rect","barRect","USE_TOUCH","verifyScroll","boundRange","disableEvent","_createElementBlock","_createElementVNode","_normalizeClass","_unref","_cache","args"],"mappings":"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"}