element-plus
Version:
A Component Library for Vue 3
1 lines • 16.8 kB
Source Map (JSON)
{"version":3,"file":"use-slider-button.mjs","sources":["../../../../../../../packages/components/slider/src/composables/use-slider-button.ts"],"sourcesContent":["import { computed, inject, nextTick, ref, watch } from 'vue'\nimport { clamp, debounce } from 'lodash-unified'\nimport { useEventListener } from '@vueuse/core'\nimport { EVENT_CODE, UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport { getEventCode } from '@element-plus/utils'\nimport { sliderContextKey } from '../constants'\n\nimport type { CSSProperties, ComputedRef, Ref, SetupContext } from 'vue'\nimport type { SliderProps } from '../slider'\nimport type {\n SliderButtonEmits,\n SliderButtonInitData,\n SliderButtonProps,\n} from '../button'\nimport type { TooltipInstance } from '@element-plus/components/tooltip'\n\nconst useTooltip = (\n props: SliderButtonProps,\n formatTooltip: Ref<SliderProps['formatTooltip']>,\n showTooltip: Ref<SliderProps['showTooltip']>\n) => {\n const tooltip = ref<TooltipInstance>()\n\n const tooltipVisible = ref(false)\n\n const enableFormat = computed(() => {\n return formatTooltip.value instanceof Function\n })\n\n const formatValue = computed(() => {\n return (\n (enableFormat.value && formatTooltip.value!(props.modelValue)) ||\n props.modelValue\n )\n })\n\n const displayTooltip = debounce(() => {\n showTooltip.value && (tooltipVisible.value = true)\n }, 50)\n\n const hideTooltip = debounce(() => {\n showTooltip.value && (tooltipVisible.value = false)\n }, 50)\n\n return {\n tooltip,\n tooltipVisible,\n formatValue,\n displayTooltip,\n hideTooltip,\n }\n}\n\nexport const useSliderButton = (\n props: SliderButtonProps,\n initData: SliderButtonInitData,\n emit: SetupContext<SliderButtonEmits>['emit']\n) => {\n const {\n disabled,\n min,\n max,\n step,\n showTooltip,\n persistent,\n precision,\n sliderSize,\n formatTooltip,\n emitChange,\n resetSize,\n updateDragging,\n } = inject(sliderContextKey)!\n\n const { tooltip, tooltipVisible, formatValue, displayTooltip, hideTooltip } =\n useTooltip(props, formatTooltip!, showTooltip)\n\n const button = ref<HTMLDivElement>()\n\n const currentPosition = computed(() => {\n return `${\n ((props.modelValue - min.value) / (max.value - min.value)) * 100\n }%`\n })\n\n const wrapperStyle: ComputedRef<CSSProperties> = computed(() => {\n return props.vertical\n ? { bottom: currentPosition.value }\n : { left: currentPosition.value }\n })\n\n const handleMouseEnter = () => {\n initData.hovering = true\n displayTooltip()\n }\n\n const handleMouseLeave = () => {\n initData.hovering = false\n if (!initData.dragging) {\n hideTooltip()\n }\n }\n\n const onButtonDown = (event: MouseEvent | TouchEvent) => {\n if (disabled.value) return\n event.preventDefault()\n onDragStart(event)\n window.addEventListener('mousemove', onDragging)\n window.addEventListener('touchmove', onDragging)\n window.addEventListener('mouseup', onDragEnd)\n window.addEventListener('touchend', onDragEnd)\n window.addEventListener('contextmenu', onDragEnd)\n button.value!.focus()\n }\n\n const incrementPosition = (amount: number) => {\n if (disabled.value) return\n initData.newPosition =\n Number.parseFloat(currentPosition.value) +\n (amount / (max.value - min.value)) * 100\n setPosition(initData.newPosition)\n emitChange()\n }\n\n const onLeftKeyDown = () => {\n incrementPosition(-step.value)\n }\n\n const onRightKeyDown = () => {\n incrementPosition(step.value)\n }\n\n const onPageDownKeyDown = () => {\n incrementPosition(-step.value * 4)\n }\n\n const onPageUpKeyDown = () => {\n incrementPosition(step.value * 4)\n }\n\n const onHomeKeyDown = () => {\n if (disabled.value) return\n setPosition(0)\n emitChange()\n }\n\n const onEndKeyDown = () => {\n if (disabled.value) return\n setPosition(100)\n emitChange()\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n const code = getEventCode(event)\n let isPreventDefault = true\n\n switch (code) {\n case EVENT_CODE.left:\n case EVENT_CODE.down:\n onLeftKeyDown()\n break\n case EVENT_CODE.right:\n case EVENT_CODE.up:\n onRightKeyDown()\n break\n case EVENT_CODE.home:\n onHomeKeyDown()\n break\n case EVENT_CODE.end:\n onEndKeyDown()\n break\n case EVENT_CODE.pageDown:\n onPageDownKeyDown()\n break\n case EVENT_CODE.pageUp:\n onPageUpKeyDown()\n break\n default:\n isPreventDefault = false\n break\n }\n\n isPreventDefault && event.preventDefault()\n }\n\n const getClientXY = (event: MouseEvent | TouchEvent) => {\n let clientX: number\n let clientY: number\n if (event.type.startsWith('touch')) {\n clientY = (event as TouchEvent).touches[0].clientY\n clientX = (event as TouchEvent).touches[0].clientX\n } else {\n clientY = (event as MouseEvent).clientY\n clientX = (event as MouseEvent).clientX\n }\n return {\n clientX,\n clientY,\n }\n }\n\n const onDragStart = (event: MouseEvent | TouchEvent) => {\n initData.dragging = true\n initData.isClick = true\n const { clientX, clientY } = getClientXY(event)\n if (props.vertical) {\n initData.startY = clientY\n } else {\n initData.startX = clientX\n }\n initData.startPosition = Number.parseFloat(currentPosition.value)\n initData.newPosition = initData.startPosition\n }\n\n const onDragging = (event: MouseEvent | TouchEvent) => {\n if (initData.dragging) {\n initData.isClick = false\n displayTooltip()\n resetSize()\n let diff: number\n const { clientX, clientY } = getClientXY(event)\n if (props.vertical) {\n initData.currentY = clientY\n diff = ((initData.startY - initData.currentY) / sliderSize.value) * 100\n } else {\n initData.currentX = clientX\n diff = ((initData.currentX - initData.startX) / sliderSize.value) * 100\n }\n initData.newPosition = initData.startPosition + diff\n setPosition(initData.newPosition)\n }\n }\n\n const onDragEnd = () => {\n if (initData.dragging) {\n /*\n * 防止在 mouseup 后立即触发 click,导致滑块有几率产生一小段位移\n * 不使用 preventDefault 是因为 mouseup 和 click 没有注册在同一个 DOM 上\n */\n setTimeout(() => {\n initData.dragging = false\n if (!initData.hovering) {\n hideTooltip()\n }\n if (!initData.isClick) {\n setPosition(initData.newPosition)\n }\n emitChange()\n }, 0)\n window.removeEventListener('mousemove', onDragging)\n window.removeEventListener('touchmove', onDragging)\n window.removeEventListener('mouseup', onDragEnd)\n window.removeEventListener('touchend', onDragEnd)\n window.removeEventListener('contextmenu', onDragEnd)\n }\n }\n\n const setPosition = async (newPosition: number) => {\n if (newPosition === null || Number.isNaN(+newPosition)) return\n\n newPosition = clamp(newPosition, 0, 100)\n const fullSteps = Math.floor((max.value - min.value) / step.value)\n const fullRangePercentage =\n ((fullSteps * step.value) / (max.value - min.value)) * 100\n const threshold = fullRangePercentage + (100 - fullRangePercentage) / 2\n let value\n if (newPosition < fullRangePercentage) {\n const valueBetween = fullRangePercentage / fullSteps\n const steps = Math.round(newPosition / valueBetween)\n value = min.value + steps * step.value\n } else if (newPosition < threshold) {\n value = min.value + fullSteps * step.value\n } else {\n value = max.value\n }\n value = Number.parseFloat(value.toFixed(precision.value))\n\n if (value !== props.modelValue) {\n emit(UPDATE_MODEL_EVENT, value)\n }\n\n if (!initData.dragging && props.modelValue !== initData.oldValue) {\n initData.oldValue = props.modelValue\n }\n\n await nextTick()\n initData.dragging && displayTooltip()\n tooltip.value!.updatePopper()\n }\n\n watch(\n () => initData.dragging,\n (val) => {\n updateDragging(val)\n }\n )\n\n useEventListener(button, 'touchstart', onButtonDown, { passive: false })\n\n return {\n disabled,\n button,\n tooltip,\n tooltipVisible,\n showTooltip,\n persistent,\n wrapperStyle,\n formatValue,\n handleMouseEnter,\n handleMouseLeave,\n onButtonDown,\n onKeyDown,\n setPosition,\n }\n}\n"],"names":[],"mappings":"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"}