UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 32.8 kB
{"version":3,"file":"scroll.vue2.cjs","sources":["../../../components/scroll/scroll.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Scrollbar } from '@/components/scrollbar'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport {\n computed,\n nextTick,\n onBeforeUnmount,\n onMounted,\n ref,\n shallowReadonly,\n toRef,\n watch,\n watchEffect,\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useRtl, useSetTimeout } from '@vexip-ui/hooks'\nimport { USE_TOUCH, createEventEmitter, isClient, isElement, isTrue } from '@vexip-ui/utils'\nimport { scrollProps } from './props'\nimport { useScrollWrapper } from './hooks'\nimport { MOVE_EVENT, UP_EVENT, scrollModes } from './symbol'\n\nimport type { ScrollbarExposed } from '@/components/scrollbar'\nimport type { EventHandler } from '@vexip-ui/utils'\nimport type { ScrollMode } from './symbol'\n\ndefineOptions({ name: 'Scroll' })\n\nconst _props = defineProps(scrollProps)\nconst props = useProps('scroll', _props, {\n scrollClass: null,\n scrollStyle: null,\n scrollAttrs: null,\n mode: {\n default: 'vertical',\n validator: value => scrollModes.includes(value),\n },\n width: '',\n height: '',\n deltaX: 40,\n deltaY: 40,\n disabled: false,\n pointer: USE_TOUCH,\n wheel: true,\n scrollX: {\n default: 0,\n static: true,\n },\n scrollY: {\n default: 0,\n static: true,\n },\n useXBar: false,\n useYBar: false,\n barFade: 1500,\n barClass: null,\n autoplay: false,\n playWaiting: 500,\n noBuffer: false,\n noTransition: false,\n onBeforeScroll: {\n default: null,\n isFunc: true,\n },\n useBarTrack: false,\n scrollTag: 'div',\n})\n\nconst emitter = createEventEmitter()\n\nconst nh = useNameHelper('scroll')\nconst { isRtl } = useRtl()\nconst { timer } = useSetTimeout()\n\nconst usingBar = ref(false)\nconst scrolling = ref(false)\nconst transitionDuration = ref<number>(0)\nconst mode = computed(() => (props.mode === 'horizontal-exact' ? 'horizontal' : props.mode))\n\nlet waitDelay = 180\n\nconst xBar = ref<ScrollbarExposed>()\nconst yBar = ref<ScrollbarExposed>()\n\nlet initialized = false\n\nconst {\n wrapperEl,\n contentEl,\n\n wrapper,\n isReady,\n x,\n y,\n percentX,\n percentY,\n xScrollLimit,\n yScrollLimit,\n enableXScroll,\n enableYScroll,\n xBarLength,\n yBarLength,\n\n handleResize,\n verifyScroll,\n computePercent,\n refresh,\n triggerUpdate,\n} = useScrollWrapper({\n mode,\n disabled: toRef(props, 'disabled'),\n width: toRef(props, 'width'),\n height: toRef(props, 'height'),\n scrollX: toRef(props, 'scrollX'),\n scrollY: toRef(props, 'scrollY'),\n onResize: entry => {\n emitEvent(props.onResize, entry)\n },\n // onBeforeRefresh: stopAutoplay,\n onAfterRefresh: () => {\n syncBarScroll()\n\n if (!initialized) {\n initialized = true\n startAutoplay()\n }\n },\n})\n\nconst slotParams = shallowReadonly({\n getState,\n refresh,\n scrollTo,\n scrollBy,\n scrollToElement,\n ensureInView,\n})\n\n/* autoplay */\nconst canPlay = ref(false)\n\nconst canAutoplay = computed(() => {\n return (\n mode.value !== 'both' &&\n (isTrue(props.autoplay) || +props.autoplay > 1000) &&\n ((mode.value === 'horizontal' && enableXScroll.value) ||\n (mode.value === 'vertical' && enableYScroll.value))\n )\n})\n\nwatch([() => props.autoplay, () => props.playWaiting], () => {\n stopAutoplay()\n nextTick(startAutoplay)\n})\n\nfunction startAutoplay() {\n if (!canAutoplay.value) return\n\n stopAutoplay()\n\n const distance = mode.value === 'horizontal' ? 'width' : 'height'\n const limit = mode.value === 'horizontal' ? xScrollLimit : yScrollLimit\n // const prop = mode.value === 'horizontal' ? 'x' : 'y'\n const prop = mode.value === 'horizontal' ? x : y\n const waiting = props.playWaiting < 20 ? 20 : props.playWaiting\n\n let playSpeed = 0.5\n\n if (typeof props.autoplay === 'number') {\n playSpeed = (wrapper[distance] / props.autoplay) * 16\n }\n\n const precessScroll = () => {\n computePercent()\n triggerUpdate()\n syncBarScroll()\n emitScrollEvent(mode.value)\n }\n const scroll = () => {\n prop.value -= playSpeed\n\n if (prop.value <= limit.value) {\n prop.value = limit.value\n canPlay.value = false\n\n precessScroll()\n\n timer.end = setTimeout(() => {\n scrollTo(0, 0, 500)\n\n timer.start = setTimeout(() => {\n canPlay.value = true\n\n emitScrollEvent(mode.value)\n scroll()\n }, 500 + waiting)\n }, waiting)\n } else {\n precessScroll()\n\n if (canPlay.value) {\n requestAnimationFrame(scroll)\n }\n }\n }\n\n timer.play = setTimeout(() => {\n canPlay.value = true\n scroll()\n }, waiting)\n}\n\nfunction stopAutoplay() {\n canPlay.value = false\n\n clearTimeout(timer.play)\n clearTimeout(timer.start)\n clearTimeout(timer.end)\n}\n/* autoplay */\n\nconst className = computed(() => {\n return [\n nh.b(),\n nh.bs('vars'),\n nh.bm(mode.value),\n {\n [nh.bm('inherit')]: props.inherit,\n [nh.bm('using-bar')]: usingBar.value,\n [nh.bm('scrolling')]: scrolling.value,\n [nh.bm('no-ready')]: !isReady.value,\n [nh.bm('no-transition')]: props.noTransition,\n },\n ]\n})\nconst style = computed(() => {\n const { width, height } = props\n\n return {\n width: width\n ? typeof width === 'string'\n ? Number.isNaN(Number(width))\n ? width\n : `${Number(width)}px`\n : `${width}px`\n : undefined,\n height: height\n ? typeof height === 'string'\n ? Number.isNaN(Number(height))\n ? height\n : `${Number(height)}px`\n : `${height}px`\n : undefined,\n }\n})\nconst wrapperClass = computed(() => {\n return [props.scrollAttrs?.class, props.scrollClass, nh.be('wrapper')]\n})\nconst wrapperStyle = computed(() => {\n return [props.scrollAttrs?.style, props.scrollStyle]\n})\n\nwatch(enableXScroll, value => {\n emitEvent(props.onXEnabledChange, value)\n})\nwatch(enableYScroll, value => {\n emitEvent(props.onYEnabledChange, value)\n})\nwatch(isReady, value => {\n if (value) {\n transitionDuration.value = -1\n emitEvent(props.onReady)\n } else {\n transitionDuration.value = 0\n }\n})\nwatchEffect(() => {\n if (!contentEl.value) return\n\n contentEl.value.style.transform = `translate3d(${isRtl.value ? -x.value : x.value}px, ${\n y.value\n }px, 0)`\n})\nwatchEffect(() => {\n if (!contentEl.value) return\n\n contentEl.value.style.transitionDuration =\n transitionDuration.value < 0 ? '' : `${transitionDuration.value}ms`\n})\n\nonMounted(() => {\n if (!isClient || !wrapperEl.value) return\n\n const style = getComputedStyle(wrapperEl.value)\n const duration = style.getPropertyValue(nh.cv('move-duration')).trim()\n\n if (duration.endsWith('ms')) {\n waitDelay = parseFloat(duration)\n } else if (duration.endsWith('s')) {\n waitDelay = parseFloat(duration) * 1000\n }\n\n waitDelay = Number.isNaN(waitDelay) ? 140 : waitDelay\n})\n\nonBeforeUnmount(stopAutoplay)\n\ndefineExpose({\n percentX,\n percentY,\n x,\n y,\n isReady,\n\n xBarLength,\n yBarLength,\n enableXScroll,\n enableYScroll,\n\n wrapper: wrapperEl,\n content: contentEl,\n xBar,\n yBar,\n\n refresh,\n scrollTo,\n scrollBy,\n scrollToElement,\n ensureInView,\n getXScrollLimit,\n getYScrollLimit,\n addScrollListener,\n removeScrollListener,\n})\n\nfunction getCommonPayload() {\n return {\n clientX: -x.value,\n clientY: -y.value,\n percentX: percentX.value,\n percentY: percentY.value,\n }\n}\n\nfunction syncBarScroll() {\n xBar.value?.handleScroll(percentX.value)\n yBar.value?.handleScroll(percentY.value)\n}\n\nfunction handleMouseDown(event: MouseEvent) {\n if (!props.pointer || event.button > 0 || USE_TOUCH) {\n return false\n }\n\n handlePointerDown(event)\n}\n\nfunction handleTouchStart(event: TouchEvent) {\n if (!props.pointer || event.touches.length !== 1) {\n return false\n }\n\n handlePointerDown(event)\n}\n\n// 记录滚动开始位置\nlet xScrollStartAt = 0\nlet yScrollStartAt = 0\n\n// 记录滚动开始鼠标位置\nlet cursorXPosition = 0\nlet cursorYPosition = 0\n\nlet moved = false\nlet target: EventTarget | null = null\nlet lastDate = 0\n\nfunction handlePointerDown(event: MouseEvent | TouchEvent) {\n if (!enableXScroll.value && !enableYScroll.value) {\n return false\n }\n\n if (event.cancelable) {\n event.preventDefault()\n }\n\n prepareScroll()\n\n transitionDuration.value = 0\n\n const pointer = 'touches' in event ? event.touches[0] : event\n\n xScrollStartAt = x.value\n yScrollStartAt = y.value\n cursorXPosition = pointer.clientX\n cursorYPosition = pointer.clientY\n\n moved = false\n target = event.target\n lastDate = Date.now()\n\n document.addEventListener(MOVE_EVENT, handlePointerMove)\n document.addEventListener(UP_EVENT, handlePointerUp)\n\n emitEvent(props.onScrollStart, getCommonPayload())\n}\n\nfunction handlePointerMove(event: MouseEvent | TouchEvent) {\n event.stopPropagation()\n\n if (!USE_TOUCH) {\n event.preventDefault()\n }\n\n const pointer = 'touches' in event ? event.touches[0] : event\n const signX = pointer.clientX - cursorXPosition > 0 ? 1 : -1\n const signY = pointer.clientY - cursorYPosition > 0 ? 1 : -1\n\n if (props.onBeforeScroll?.({ signX, signY }) === false) {\n return false\n }\n\n scrolling.value = true\n\n if (enableXScroll.value) {\n x.value = xScrollStartAt + pointer.clientX - cursorXPosition\n moved = true\n }\n\n if (enableYScroll.value) {\n y.value = yScrollStartAt + pointer.clientY - cursorYPosition\n moved = true\n }\n\n if (props.noBuffer) {\n verifyScroll()\n } else {\n computePercent()\n triggerUpdate()\n }\n\n syncBarScroll()\n emitScrollEvent(mode.value)\n}\n\nfunction handlePointerUp(event: MouseEvent | TouchEvent) {\n if (!moved && target && event.target === target && Date.now() - lastDate <= 500) {\n target.dispatchEvent(new MouseEvent('click', event))\n }\n\n document.removeEventListener(MOVE_EVENT, handlePointerMove)\n document.removeEventListener(UP_EVENT, handlePointerUp)\n\n transitionDuration.value = -1\n moved = false\n\n handleBuffer()\n verifyScroll()\n syncBarScroll()\n emitEvent(props.onScrollEnd, getCommonPayload())\n startAutoplay()\n}\n\n// 按下 shift 时为横向滚动,保持和原生操作一致\nfunction handleWheel(event: WheelEvent, type: 'vertical' | 'horizontal') {\n const isVerticalScroll = enableYScroll.value && type === 'vertical'\n const isHorizontalScroll = enableXScroll.value && type === 'horizontal'\n\n // 纵横滚动均使用 deltaY 标记\n const sign = event.deltaY > 0 ? -1 : 1\n\n if (\n props.wheel &&\n (isVerticalScroll || isHorizontalScroll) &&\n props.onBeforeScroll?.({ signX: -sign, signY: -sign }) !== false\n ) {\n event.preventDefault()\n event.stopPropagation()\n } else {\n return true\n }\n\n if (mode.value !== 'both' && mode.value !== type) return false\n\n prepareScroll()\n\n const computedDelta = sign * (type === 'horizontal' ? props.deltaX : props.deltaY)\n\n if (isVerticalScroll) {\n y.value += computedDelta\n } else if (isHorizontalScroll) {\n x.value += computedDelta\n }\n\n verifyScroll()\n syncBarScroll()\n emitScrollEvent(type)\n\n emitEvent(props.onWheel, {\n ...getCommonPayload(),\n type,\n sign: -sign as 1 | -1,\n })\n\n startAutoplay()\n}\n\nfunction prepareScroll() {\n stopAutoplay()\n clearTimeout(timer.buffer)\n}\n\nfunction handleBuffer() {\n if (props.noBuffer) {\n timer.buffer = setTimeout(() => {\n scrolling.value = false\n }, 300)\n } else {\n scrolling.value = false\n }\n}\n\nfunction handleBarScrollStart(type: 'vertical' | 'horizontal') {\n usingBar.value = true\n emitEvent(props.onBarScrollStart, { ...getCommonPayload(), type })\n}\n\nfunction handleBarScrollEnd(type: 'vertical' | 'horizontal') {\n usingBar.value = false\n emitEvent(props.onBarScrollEnd, { ...getCommonPayload(), type })\n}\n\nfunction handleXBarScroll(percent: number) {\n percentX.value = percent\n x.value = (percent * xScrollLimit.value) / 100\n triggerUpdate()\n\n emitEvent(props.onBarScroll, {\n ...getCommonPayload(),\n type: 'horizontal',\n })\n emitScrollEvent('horizontal')\n}\n\nfunction handleYBarScroll(percent: number) {\n percentY.value = percent\n y.value = (percent * yScrollLimit.value) / 100\n triggerUpdate()\n\n emitEvent(props.onBarScroll, {\n ...getCommonPayload(),\n type: 'vertical',\n })\n emitScrollEvent('vertical')\n}\n\nfunction emitScrollEvent(type: Exclude<ScrollMode, 'horizontal-exact'>) {\n emitEvent(props.onScroll, {\n ...getCommonPayload(),\n type,\n })\n emitter.emit('scroll', {\n ...getCommonPayload(),\n type,\n })\n}\n\nfunction ensureScrollOffset() {\n if (wrapperEl.value) {\n wrapperEl.value.scrollTop = 0\n wrapperEl.value.scrollLeft = 0\n }\n}\n\nfunction getState() {\n const { clientX: scrollX, clientY: scrollY, percentX, percentY } = getCommonPayload()\n\n return {\n scrollX,\n scrollY,\n percentX,\n percentY,\n enableXScroll: enableXScroll.value,\n enableYScroll: enableYScroll.value,\n }\n}\n\nfunction waitTransition(duration = waitDelay) {\n clearTimeout(timer.wait)\n\n return new Promise<void>(resolve => {\n timer.wait = setTimeout(() => resolve(), duration + 1)\n })\n}\n\nfunction scrollTo(clientX: number, clientY: number, duration?: number) {\n setDuration(duration)\n nextTick(() => {\n let changed = false\n\n if (enableXScroll.value && Math.abs(x.value + clientX) > 0.01) {\n x.value = -clientX\n changed = true\n }\n\n if (enableYScroll.value && Math.abs(y.value + clientY) > 0.01) {\n y.value = -clientY\n changed = true\n }\n\n verifyScroll()\n syncBarScroll()\n\n if (!changed) transitionDuration.value = -1\n })\n\n return waitTransition(duration)\n}\n\nfunction scrollBy(deltaX: number, deltaY: number, duration?: number) {\n setDuration(duration)\n nextTick(() => {\n let changed = false\n\n if (deltaX && enableXScroll) {\n x.value -= deltaX\n changed = true\n }\n\n if (deltaY && enableYScroll) {\n y.value -= deltaY\n changed = true\n }\n\n verifyScroll()\n syncBarScroll()\n\n if (!changed) transitionDuration.value = -1\n })\n\n return waitTransition(duration)\n}\n\nfunction setDuration(duration?: number) {\n if (typeof duration === 'number') {\n transitionDuration.value = duration\n\n if (transitionDuration.value === 0) {\n nextTick(() => {\n transitionDuration.value = -1\n })\n }\n }\n}\n\nfunction scrollToElement(el: string | Element, duration?: number, offset = 0) {\n if (!contentEl.value) return Promise.resolve()\n\n if (typeof el === 'string') {\n el = contentEl.value.querySelector(el)!\n }\n\n if (!isElement(el)) return Promise.resolve()\n\n const wrapperRect = contentEl.value.getBoundingClientRect()\n const elRect = el.getBoundingClientRect()\n\n let clientX = 0\n let clientY = 0\n\n if (mode.value !== 'vertical') {\n clientX = elRect.left - wrapperRect.left + offset\n }\n\n if (mode.value !== 'horizontal') {\n clientY = elRect.top - wrapperRect.top + offset\n }\n\n return scrollTo(clientX, clientY, duration)\n}\n\nfunction ensureInView(el: string | Element, duration?: number, offset = 0) {\n if (!wrapperEl.value) return Promise.resolve()\n\n if (typeof el === 'string') {\n el = wrapperEl.value.querySelector(el)!\n }\n\n if (!isElement(el)) return Promise.resolve()\n\n const wrapperRect = wrapperEl.value.getBoundingClientRect()\n const elRect = el.getBoundingClientRect()\n\n let clientX = 0\n let clientY = 0\n\n if (mode.value !== 'vertical') {\n if (elRect.left < wrapperRect.left + offset) {\n clientX = elRect.left - wrapperRect.left - offset\n } else if (elRect.right > wrapperRect.right - offset) {\n clientX = elRect.right - wrapperRect.right + offset\n }\n }\n\n if (mode.value !== 'horizontal') {\n if (elRect.top < wrapperRect.top + offset) {\n clientY = elRect.top - wrapperRect.top - offset\n } else if (elRect.bottom > wrapperRect.bottom - offset) {\n clientY = elRect.bottom - wrapperRect.bottom + offset\n }\n }\n\n return scrollBy(clientX, clientY, duration)\n}\n\nfunction getXScrollLimit() {\n return [0, -xScrollLimit.value]\n}\n\nfunction getYScrollLimit() {\n return [0, -yScrollLimit.value]\n}\n\nfunction addScrollListener(listener: EventHandler) {\n emitter.on('scroll', listener)\n}\n\nfunction removeScrollListener(listener: EventHandler) {\n emitter.off('scroll', listener)\n}\n</script>\n\n<template>\n <div\n ref=\"wrapperEl\"\n :class=\"className\"\n :style=\"style\"\n @mousedown=\"handleMouseDown\"\n @touchstart=\"handleTouchStart\"\n @scroll=\"ensureScrollOffset\"\n @wheel.exact=\"\n handleWheel($event, props.mode === 'horizontal-exact' ? 'horizontal' : 'vertical')\n \"\n @wheel.shift=\"handleWheel($event, 'horizontal')\"\n >\n <div v-if=\"$slots.extra\" :class=\"nh.be('extra')\">\n <slot name=\"extra\" v-bind=\"slotParams\"></slot>\n </div>\n <ResizeObserver throttle :on-resize=\"handleResize\">\n <component\n :is=\"props.scrollTag || 'div'\"\n v-bind=\"props.scrollAttrs\"\n ref=\"contentEl\"\n :class=\"wrapperClass\"\n :style=\"wrapperStyle\"\n @transitionend=\"transitionDuration = -1\"\n >\n <slot v-bind=\"slotParams\"></slot>\n </component>\n </ResizeObserver>\n <Scrollbar\n v-if=\"props.useXBar\"\n ref=\"xBar\"\n inherit\n placement=\"bottom\"\n :class=\"[nh.bem('bar', 'horizontal'), props.barClass]\"\n :fade=\"props.barFade\"\n :bar-length=\"xBarLength\"\n :disabled=\"!enableXScroll\"\n :duration=\"transitionDuration\"\n :use-track=\"props.useBarTrack\"\n @scroll-start=\"handleBarScrollStart('horizontal')\"\n @scroll=\"handleXBarScroll\"\n @scroll-end=\"handleBarScrollEnd('horizontal')\"\n ></Scrollbar>\n <Scrollbar\n v-if=\"props.useYBar\"\n ref=\"yBar\"\n inherit\n placement=\"right\"\n :class=\"[nh.bem('bar', 'vertical'), props.barClass]\"\n :fade=\"props.barFade\"\n :bar-length=\"yBarLength\"\n :disabled=\"!enableYScroll\"\n :duration=\"transitionDuration\"\n :use-track=\"props.useBarTrack\"\n @scroll-start=\"handleBarScrollStart('vertical')\"\n @scroll=\"handleYBarScroll\"\n @scroll-end=\"handleBarScrollEnd('vertical')\"\n ></Scrollbar>\n </div>\n</template>\n"],"names":["_props","__props","props","useProps","value","scrollModes","USE_TOUCH","emitter","createEventEmitter","nh","useNameHelper","isRtl","useRtl","timer","useSetTimeout","usingBar","ref","scrolling","transitionDuration","mode","computed","waitDelay","xBar","yBar","initialized","wrapperEl","contentEl","wrapper","isReady","x","y","percentX","percentY","xScrollLimit","yScrollLimit","enableXScroll","enableYScroll","xBarLength","yBarLength","handleResize","verifyScroll","computePercent","refresh","triggerUpdate","useScrollWrapper","toRef","entry","emitEvent","syncBarScroll","startAutoplay","slotParams","shallowReadonly","getState","scrollTo","scrollBy","scrollToElement","ensureInView","canPlay","canAutoplay","isTrue","watch","stopAutoplay","nextTick","distance","limit","prop","waiting","playSpeed","precessScroll","emitScrollEvent","scroll","className","style","width","height","wrapperClass","_a","wrapperStyle","watchEffect","onMounted","isClient","duration","onBeforeUnmount","__expose","getXScrollLimit","getYScrollLimit","addScrollListener","removeScrollListener","getCommonPayload","_b","handleMouseDown","event","handlePointerDown","handleTouchStart","xScrollStartAt","yScrollStartAt","cursorXPosition","cursorYPosition","moved","target","lastDate","prepareScroll","pointer","MOVE_EVENT","handlePointerMove","UP_EVENT","handlePointerUp","signX","signY","handleBuffer","handleWheel","type","isVerticalScroll","isHorizontalScroll","sign","computedDelta","handleBarScrollStart","handleBarScrollEnd","handleXBarScroll","percent","handleYBarScroll","ensureScrollOffset","scrollX","scrollY","waitTransition","resolve","clientX","clientY","setDuration","changed","deltaX","deltaY","el","offset","isElement","wrapperRect","elRect","listener","_createElementBlock","$event","_unref","_cache","_withModifiers","$slots","_normalizeClass","_renderSlot","_ctx","_createVNode","ResizeObserver","_createBlock","_resolveDynamicComponent","_mergeProps","Scrollbar"],"mappings":"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"}