xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 25.3 kB
Source Map (JSON)
{"version":3,"file":"slider.mjs","sources":["../../src/slider/slider.tsx"],"sourcesContent":["import {\n defineComponent,\n VNode,\n ref,\n reactive,\n provide,\n computed,\n onBeforeUnmount,\n onMounted,\n watch,\n toRefs,\n} from 'vue';\nimport props from './props';\nimport TSliderButton from './slider-button';\nimport { SliderValue } from './type';\n// hooks\nimport { useFormDisabled } from '../form/hooks';\nimport isArray from 'lodash/isArray';\n\nimport { usePrefixClass, useCommonClassName } from '../hooks/useConfig';\nimport { useSliderMark } from './hooks/useSliderMark';\nimport { useSliderInput } from './hooks/useSliderInput';\nimport { formatSliderValue, getStopStyle } from './util/common';\nimport { sliderPropsInjectKey } from './util/constants';\nimport useVModel from '../hooks/useVModel';\nimport isNumber from 'lodash/isNumber';\n\ninterface SliderButtonType {\n setPosition: (param: number) => {};\n}\nexport default defineComponent({\n name: 'XSlider',\n model: {\n prop: 'value',\n event: 'change',\n },\n props: { ...props },\n\n setup(props) {\n const disabled = useFormDisabled();\n const COMPONENT_NAME = usePrefixClass('slider');\n const { STATUS } = useCommonClassName();\n const { value, modelValue } = toRefs(props) as any;\n const [sliderValue, setSliderValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n\n const sliderContainerRef = ref<HTMLDivElement>();\n const sliderRef = ref<HTMLDivElement>();\n const firstButtonRef = ref<SliderButtonType>();\n const secondButtonRef = ref<SliderButtonType>();\n\n const firstValue = ref(formatSliderValue(sliderValue.value, 'first'));\n const secondValue = ref(formatSliderValue(sliderValue.value, 'second'));\n const dragging = ref(false);\n const sliderSize = ref(1);\n\n const vertical = computed(() => {\n return props.layout === 'vertical';\n });\n\n /** ----------------- 样式计算 start ------------- */\n const containerClass = computed(() => [`${COMPONENT_NAME.value}__container`, { 'is-vertical': vertical.value }]);\n const sliderClass = computed(() => {\n return [\n `${COMPONENT_NAME.value}`,\n {\n 'is-vertical': vertical.value,\n [`${COMPONENT_NAME.value}--with-input`]: props.inputNumberProps,\n [`${COMPONENT_NAME.value}--vertical`]: vertical.value,\n [STATUS.value.disabled]: disabled.value,\n },\n ];\n });\n const sliderRailClass = computed(() => [\n `${COMPONENT_NAME.value}__rail`,\n { 'show-input': props.inputNumberProps, disabled: disabled.value },\n ]);\n const runwayStyle = computed(() => {\n return vertical.value ? { height: '100%' } : {};\n });\n const barStyle = computed(() => {\n const barStart = props.range ? `${(100 * (minValue.value - props.min)) / rangeDiff.value}%` : '0%';\n const currentDiff = props.range ? maxValue.value - minValue.value : firstValue.value - props.min;\n const barSize = `${(100 * currentDiff) / rangeDiff.value}%`;\n return vertical.value\n ? {\n height: barSize,\n bottom: barStart,\n }\n : {\n width: barSize,\n left: barStart,\n };\n });\n /** ----------------- 样式计算 end ------------- */\n\n // 差值范围\n const rangeDiff = computed(() => {\n return props.max - props.min;\n });\n const minValue = computed(() => {\n return Math.min(firstValue.value, secondValue.value);\n });\n const maxValue = computed(() => {\n return Math.max(firstValue.value, secondValue.value);\n });\n const steps = computed(() => {\n if (!props.showStep || props.min > props.max) return [];\n if (props.step === 0) {\n console.warn('[Element Warn][Slider]step should not be 0.');\n return [];\n }\n const stepCount = rangeDiff.value / props.step;\n const stepWidth = (100 * props.step) / rangeDiff.value;\n const result = [];\n for (let i = 1; i < stepCount; i++) {\n result.push(i * stepWidth);\n }\n if (props.range) {\n const r = result.filter(\n (step) =>\n step < (100 * (minValue.value - props.min)) / rangeDiff.value ||\n props.step > (100 * (maxValue.value - props.max)) / rangeDiff.value,\n );\n return r;\n }\n return result.filter((step) => step > (100 * (firstValue.value - props.min)) / rangeDiff.value);\n });\n const precision = computed(() => {\n const precisions = [props.min, props.max, props.step].map((item) => {\n const decimalArr = `${item}`.split('.');\n return decimalArr[1] ? decimalArr[1].length : 0;\n });\n return Math.max.apply(null, precisions);\n });\n // 防止值越级\n const setValues = (value: SliderValue): SliderValue => {\n const [min, max] = [props.min, props.max];\n if (min > max) {\n console.warn('[Slider] max should be greater than min.');\n return;\n }\n // 双向滑块\n if (props.range && isArray(value)) {\n let [maxLimit, minLimit] = [Math.min(...value), Math.max(...value)];\n if (maxLimit > max) {\n maxLimit = firstValue.value;\n }\n if (maxLimit < min) {\n maxLimit = min;\n }\n if (minLimit < min) {\n minLimit = secondValue.value;\n }\n if (minLimit > max) {\n minLimit = max;\n }\n [firstValue.value, secondValue.value] = [maxLimit, minLimit];\n return [maxLimit, minLimit];\n }\n let preValue = value as number;\n if (preValue < min) {\n preValue = min;\n }\n if (preValue > max) {\n preValue = max;\n }\n return preValue;\n };\n // 只要触发修改就要有这个方法抛出change事件\n const emitChange = (value: SliderValue) => {\n let changeValue = value;\n if (changeValue === undefined) {\n if (props.range) {\n changeValue = [firstValue.value, secondValue.value];\n } else {\n changeValue = firstValue.value;\n }\n }\n const fixValue: SliderValue = setValues(changeValue);\n setSliderValue(fixValue);\n };\n\n const resetSize = () => {\n if (sliderRef.value) {\n sliderSize.value = sliderRef.value[`client${vertical.value ? 'Height' : 'Width'}`];\n }\n };\n\n // 是否以完成挂载(部分组合组件如inputNumber依赖于首次init后的状态值进行渲染)\n const isAlreadyMount = ref(false);\n // 初始化传入的value\n const init = () => {\n let valuetext: string | number;\n if (props.range) {\n if (isArray(sliderValue.value)) {\n firstValue.value = Math.max(props.min || 0, sliderValue.value[0]);\n secondValue.value = Math.min(props.max || 100, sliderValue.value[1]);\n } else {\n firstValue.value = props.min || 0;\n secondValue.value = props.max || 100;\n }\n valuetext = `${firstValue.value}-${secondValue.value}`;\n } else {\n if (!isNumber(sliderValue.value)) {\n firstValue.value = props.min;\n } else {\n firstValue.value = Math.min(props.max, Math.max(props.min, sliderValue.value as number));\n }\n valuetext = String(firstValue.value);\n }\n if (sliderContainerRef.value) {\n sliderContainerRef.value.setAttribute('aria-valuetext', valuetext);\n }\n resetSize();\n window.addEventListener('resize', resetSize);\n };\n // 相应button的位置\n const setPosition = (percent: number): void => {\n let targetValue = (percent * rangeDiff.value) / 100;\n targetValue = props.min + targetValue;\n if (!props.range && firstButtonRef.value) {\n firstButtonRef.value.setPosition(percent);\n return;\n }\n let button;\n if (Math.abs(minValue.value - targetValue) < Math.abs(maxValue.value - targetValue)) {\n button = firstValue.value < secondValue.value ? 'button1' : 'button2';\n } else {\n button = firstValue.value > secondValue.value ? 'button1' : 'button2';\n }\n if (button === 'button1' && firstButtonRef.value) {\n firstButtonRef.value.setPosition(percent);\n }\n if (button === 'button2' && secondButtonRef.value) {\n secondButtonRef.value.setPosition(percent);\n }\n };\n\n // 全局点击\n const onSliderClick = (event: MouseEvent): void => {\n if (disabled.value || dragging.value) {\n return;\n }\n if (!sliderRef.value) return;\n resetSize();\n let value = 0;\n if (vertical.value) {\n const sliderOffsetBottom = sliderRef.value.getBoundingClientRect().bottom;\n value = ((sliderOffsetBottom - event.clientY) / sliderSize.value) * 100;\n setPosition(value);\n } else {\n const sliderOffsetLeft = sliderRef.value.getBoundingClientRect().left;\n value = ((event.clientX - sliderOffsetLeft) / sliderSize.value) * 100;\n setPosition(value);\n }\n };\n\n // mark 点击触发修改事件\n const changeValue = (point: number) => {\n if (disabled.value || dragging.value) {\n return;\n }\n resetSize();\n const value = Number((point / rangeDiff.value) * 100);\n setPosition(value);\n emitChange(point);\n };\n\n /** 副作用监听 */\n watch(\n () => sliderValue.value,\n (newVal) => {\n if (dragging.value === true) return;\n if (isArray(newVal) && props.range) {\n [firstValue.value, secondValue.value] = newVal;\n } else {\n firstValue.value = newVal as number;\n }\n },\n );\n\n watch([firstValue, secondValue, dragging], (newStates, prevStates) => {\n if (newStates[0] !== prevStates[0]) {\n if (props.range) {\n emitChange([minValue.value, maxValue.value]);\n } else {\n emitChange(firstValue.value);\n }\n }\n if (newStates[1] !== prevStates[1]) {\n if (props.range) {\n emitChange([minValue.value, maxValue.value]);\n }\n }\n if (newStates[2] !== prevStates[2] && newStates[2] === false) {\n init();\n }\n });\n\n /** 挂载&卸载 */\n onMounted(() => {\n init();\n isAlreadyMount.value = true;\n });\n onBeforeUnmount(() => {\n window.removeEventListener('resize', resetSize);\n });\n\n /** -------------------------- 渲染相关逻辑 start -------------------------- */\n const markConfig = computed(() => ({\n max: props.max,\n min: props.min,\n marks: props.marks,\n vertical: vertical.value,\n prefixName: COMPONENT_NAME.value,\n }));\n const renderMask = useSliderMark(markConfig);\n\n const inputConfig = computed(() => ({\n max: props.max,\n min: props.min,\n inputNumberProps: props.inputNumberProps,\n step: props.step,\n prefixName: COMPONENT_NAME.value,\n vertical: vertical.value,\n disabled: disabled.value,\n }));\n const renderInputNumber = useSliderInput(inputConfig);\n\n const renderInputButton = (): VNode => {\n const firstInputVal = setValues(firstValue.value) as number;\n const firstInputOnChange = (v: number) => {\n firstValue.value = setValues(v) as number;\n };\n const secondInputVal = setValues(secondValue.value) as number;\n const secondInputOnChange = (v: number) => {\n secondValue.value = setValues(v) as number;\n };\n return (\n <div\n class={[\n `${COMPONENT_NAME.value}__input-container`,\n {\n 'is-vertical': vertical.value,\n },\n ]}\n >\n {renderInputNumber(firstInputVal, firstInputOnChange)}\n {props.range && <div class={`${COMPONENT_NAME.value}__center-line`} />}\n {props.range && renderInputNumber(secondInputVal, secondInputOnChange)}\n </div>\n );\n };\n /** -------------------------- 渲染相关逻辑 end -------------------------- */\n\n /** 父子共用状态&方法 */\n const toggleDragging = (toState: boolean) => {\n dragging.value = toState;\n };\n\n const { min, max, step } = toRefs(props);\n provide(\n sliderPropsInjectKey,\n reactive({\n min,\n max,\n step,\n dragging,\n toggleDragging,\n precision,\n disabled,\n resetSize,\n sliderSize,\n }),\n );\n\n return () => (\n <div class={containerClass.value} ref={sliderContainerRef}>\n <div\n class={sliderClass.value}\n role=\"slider\"\n aria-valuemin={props.min}\n aria-valuemax={props.max}\n aria-orientation={props.layout}\n aria-disabled={disabled.value}\n tooltip-props={props.tooltipProps}\n >\n <div class={sliderRailClass.value} style={runwayStyle.value} onClick={onSliderClick} ref={sliderRef}>\n <div class={`${COMPONENT_NAME.value}__track`} style={barStyle.value} />\n <TSliderButton\n vertical={vertical.value}\n value={firstValue.value}\n ref={firstButtonRef}\n disabled={disabled.value}\n tooltip-props={props.tooltipProps}\n label={props.label}\n onInput={(v: number) => {\n firstValue.value = v;\n }}\n />\n {props.range && (\n <TSliderButton\n vertical={vertical.value}\n value={secondValue.value}\n ref={secondButtonRef}\n disabled={disabled.value}\n label={props.label}\n tooltip-props={props.tooltipProps}\n onInput={(v: number) => {\n secondValue.value = v;\n }}\n />\n )}\n {props.showStep && (\n <div class={`${COMPONENT_NAME.value}__stops`}>\n {steps.value.map((item: any, key) => {\n if (item.position === 0 || item.position === 100) return null;\n return (\n <div class={`${COMPONENT_NAME.value}__stop`} key={key} style={getStopStyle(item, vertical.value)} />\n );\n })}\n </div>\n )}\n {renderMask(changeValue)}\n </div>\n </div>\n {isAlreadyMount.value && props.inputNumberProps && renderInputButton()}\n </div>\n );\n },\n});\n"],"names":["name","model","prop","event","props","sliderValue","setSliderValue","height","bottom","width","left","console","result","step","min","max","maxLimit","minLimit","sliderSize","isArray","firstValue","secondValue","valuetext","isNumber","resetSize","window","targetValue","firstButtonRef","secondButtonRef","value","watch","emitChange","init","onMounted","onBeforeUnmount","_createVNode","provide","dragging","toggleDragging","precision","disabled","TSliderButton"],"mappings":"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"}