tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 9.6 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../common/js/drawer/utils.ts","../../../../components/drawer/hooks/index.ts"],"sourcesContent":["type Placement = 'left' | 'right' | 'top' | 'bottom';\n\ninterface SizeDragLimit {\n max: number;\n min: number;\n}\n\nexport function getSizeDraggable(\n sizeDraggable: boolean | SizeDragLimit,\n limit: { max: number; min: number }\n) {\n if (typeof sizeDraggable === 'boolean') {\n return {\n allowSizeDraggable: sizeDraggable,\n max: limit.max,\n min: limit.min,\n };\n }\n\n return {\n allowSizeDraggable: true,\n max: sizeDraggable.max,\n min: sizeDraggable.min,\n };\n}\n\ntype IOptions = {\n x: number;\n y: number;\n maxWidth: number;\n maxHeight: number;\n min: number;\n max: number;\n};\n\n// > min && < max\nfunction calcSizeRange(size: number, min: number, max: number) {\n return Math.min(Math.max(size, min), max);\n}\n\nexport function calcMoveSize(placement: Placement, opts: IOptions) {\n const { x, y, max, min, maxWidth, maxHeight } = opts;\n let moveSize: number | undefined;\n switch (placement) {\n case 'right':\n // |<--- x --->| |\n // | maxWidth |\n // | size | > min && < max\n moveSize = calcSizeRange(maxWidth - x, min, max);\n break;\n case 'left':\n // |<-- x -->| |\n // x > min && < max\n moveSize = calcSizeRange(x, min, max);\n break;\n case 'top':\n // - - - - - - - -\n // | y |\n // | |\n // - - - - - - - -\n // > min && < max\n // moveSize = Math.min(Math.max(y, min), max);\n moveSize = calcSizeRange(y, min, max);\n break;\n case 'bottom':\n // - - - - - - - -\n // | y |\n // | | maxHeight\n // - - - - - - - -\n // | size |\n // > min && < max\n moveSize = calcSizeRange(maxHeight - y, min, max);\n break;\n default:\n // 参数缺失直接返回\n return moveSize;\n }\n return moveSize;\n}\n","import { computed, ref } from 'vue';\nimport { Styles } from '../../common';\nimport { getSizeDraggable, calcMoveSize } from '@tdesign/common-js/drawer/utils';\nimport type { TdDrawerProps } from '../type';\n\nexport const useDrag = (props: TdDrawerProps) => {\n // 以下为拖拽改变抽屉大小相关 可以抽成hooks\n const isSizeDragging = ref(false);\n const draggedSizeValue = ref<string>(null);\n\n const enableDrag = () => {\n // mousedown绑定mousemove和mouseup事件\n document.addEventListener('mouseup', handleMouseup, true);\n document.addEventListener('mousemove', handleMousemove, true);\n isSizeDragging.value = true;\n };\n\n const handleMouseup = () => {\n document.removeEventListener('mouseup', handleMouseup, true);\n document.removeEventListener('mousemove', handleMousemove, true);\n isSizeDragging.value = false;\n };\n\n const handleMousemove = (e: MouseEvent) => {\n // 鼠标移动时计算draggedSizeValue的值\n const { x, y } = e;\n const maxHeight = document.documentElement.clientHeight;\n const maxWidth = document.documentElement.clientWidth;\n const offsetHeight = 8;\n const offsetWidth = 8;\n // x 轴方向使用最大宽度,y轴方向使用最大高度\n const max = props.placement === 'left' || props.placement === 'right' ? maxWidth : maxHeight;\n // x 轴方向使用默认最小宽度,y轴方向使用默认最小高度\n const min = props.placement === 'left' || props.placement === 'right' ? offsetWidth : offsetHeight;\n const { allowSizeDraggable, max: limitMax, min: limitMin } = getSizeDraggable(props.sizeDraggable, { max, min });\n\n // 不支持拖拽就直接返回\n if (!allowSizeDraggable || !isSizeDragging.value) return;\n\n const moveSize = calcMoveSize(props.placement, {\n x,\n y,\n maxWidth,\n maxHeight,\n max: limitMax,\n min: limitMin,\n });\n\n if (typeof moveSize === 'undefined') return;\n\n draggedSizeValue.value = `${moveSize}px`;\n props.onSizeDragEnd?.({\n e,\n size: moveSize,\n });\n };\n\n const draggableLineStyles = computed(() => {\n // 设置拖拽control的样式\n const isHorizontal = ['right', 'left'].includes(props.placement);\n const oppositeMap = {\n left: 'right',\n right: 'left',\n top: 'bottom',\n bottom: 'top',\n };\n return {\n zIndex: 1,\n position: 'absolute',\n background: 'transparent',\n [oppositeMap[props.placement]]: 0,\n width: isHorizontal ? '16px' : '100%',\n height: isHorizontal ? '100%' : '16px',\n cursor: isHorizontal ? 'col-resize' : 'row-resize',\n } as Styles;\n });\n\n return { draggedSizeValue, enableDrag, draggableLineStyles };\n};\n"],"names":["getSizeDraggable","sizeDraggable","limit","allowSizeDraggable","max","min","calcSizeRange","size","Math","calcMoveSize","placement","opts","x","y","maxWidth","maxHeight","moveSize","useDrag","props","isSizeDragging","ref","draggedSizeValue","enableDrag","document","addEventListener","handleMouseup","handleMousemove","value","removeEventListener","e","_props$onSizeDragEnd","documentElement","clientHeight","clientWidth","offsetHeight","offsetWidth","_getSizeDraggable","limitMax","limitMin","onSizeDragEnd","call","draggableLineStyles","computed","isHorizontal","includes","oppositeMap","left","right","top","bottom","_defineProperty","zIndex","position","background"],"mappings":"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"}