UNPKG

hongluan-ui

Version:
1 lines 7.5 kB
{"version":3,"file":"resizer.mjs","sources":["../../../../../../packages/components/dialog/src/resizer.ts"],"sourcesContent":["\nimport { setTransform } from '@hongluan-ui/utils'\nimport type { Directive, DirectiveBinding } from 'vue'\n\nexport interface DialogElement extends HTMLDivElement {\n __resizer__: {\n width: number\n height: number\n lastWidth: number\n lastHeight: number\n downX: number\n downY: number\n moveHandler: (e: MouseEvent) => void\n upHandler: (e: MouseEvent) => void\n downHandler: (e: MouseEvent) => void\n }\n}\n\nconst initDialogResizer = (dlg: DialogElement) => {\n const resizer = dlg.__resizer__\n const body = dlg.querySelector('.panel-body') as HTMLDivElement\n body.addEventListener('mousedown', resizer.downHandler)\n\n resizer.width = 0\n resizer.height = 0\n}\n\nconst resetDialogResizer = (dlg: DialogElement) => {\n const resizer = dlg.__resizer__\n const body = dlg.querySelector('.panel-body') as HTMLDivElement\n body.removeEventListener('mousedown', resizer.downHandler)\n}\n\nconst DialogResizer: Directive = {\n beforeMount: (dlg: DialogElement, binding: DirectiveBinding) => {\n dlg.__resizer__ = Object.assign({\n moveHandler: (e: MouseEvent) => {\n const resizer = dlg.__resizer__\n const { downX, downY, lastWidth, lastHeight, height: originHeight, width: originWidth } = resizer\n\n const { clientX, clientY } = e\n const transformStr = dlg!.style.transform\n\n const diffX = clientX - downX\n const diffY = clientY - downY\n const newWidth = lastWidth + diffX\n const newHeight = lastHeight + diffY\n const scaleX = newWidth / originWidth\n const scaleY = newHeight / originHeight\n\n dlg!.style.transformOrigin = 'top left'\n dlg!.style.transform = setTransform(transformStr, 'scale', `scale(${scaleX},${scaleY})`)\n },\n upHandler: () => {\n const resizer = dlg.__resizer__\n removeEventListener('mousemove', resizer.moveHandler)\n removeEventListener('mouseup', resizer.upHandler)\n },\n downHandler: (e: MouseEvent) => {\n const resizer = dlg.__resizer__\n\n const downX = e.clientX\n const downY = e.clientY\n\n resizer.downX = downX\n resizer.downY = downY\n\n const resizerDom = window.getComputedStyle(dlg.querySelector('.panel-body')!, '::after')\n const resizerWidth = parseFloat(resizerDom.getPropertyValue('width'))\n const resizerHeight = parseFloat(resizerDom.getPropertyValue('height'))\n\n const targetRect = dlg!.getBoundingClientRect()\n if (!resizer.width) { // 保留原始尺寸\n resizer.width = targetRect.width\n resizer.height = targetRect.height\n }\n const { bottom, right, height, width } = targetRect\n resizer.lastWidth = width\n resizer.lastHeight = height\n const resizerTop = bottom - resizerHeight\n const resizerLeft = right - resizerWidth\n\n if (downX >= resizerLeft && downX <= right && downY <= bottom && downY >= resizerTop) {\n addEventListener('mousemove', resizer.moveHandler)\n addEventListener('mouseup', resizer.upHandler)\n }\n },\n })\n\n if (!binding.value.canResize) return\n\n initDialogResizer(dlg)\n },\n updated(dlg: DialogElement, binding: DirectiveBinding) {\n if (binding.value.canResize) {\n initDialogResizer(dlg)\n } else {\n resetDialogResizer(dlg)\n }\n if (binding.value.showAs === 'drawer' || binding.value.placement === 'fullscreen') {\n dlg.style.removeProperty('transform-origin')\n dlg!.style.transform = setTransform(dlg!.style.transform, 'scale', '')\n }\n },\n beforeUnmount(dlg: DialogElement) {\n resetDialogResizer(dlg)\n dlg.__resizer__ = {} as any\n },\n}\n\nexport { DialogResizer }\n"],"names":[],"mappings":"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"}