element-plus
Version:
A Component Library for Vue 3
1 lines • 16.2 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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"}