hongluan-ui
Version:
Hongluan Component Library for Vue 3
1 lines • 5.37 kB
Source Map (JSON)
{"version":3,"file":"use-resizer.mjs","sources":["../../../../../../../packages/components/simple-table/src/composables/use-resizer.ts"],"sourcesContent":["import { nextTick, onBeforeUnmount, onMounted, watch } from 'vue'\n\nimport type { Ref } from 'vue'\nimport type { ColumnType, ResizeOption } from '../simple-table'\n\nexport interface ResizerCellElement extends HTMLTableCellElement {\n mouseDown: boolean\n oldX: number\n oldWidth: number\n}\n\nfunction useResizer(resize: boolean | ResizeOption, cols: Ref<ColumnType[]>, table: Ref<HTMLTableElement>) {\n const limitation = { min: 30, max: Number.MAX_SAFE_INTEGER, ...(typeof resize === 'boolean' ? {} : resize) }\n let tTH: ResizerCellElement\n\n function mousedownHanlder(this: ResizerCellElement, event: MouseEvent) {\n tTH = this\n if (event.offsetX > tTH.offsetWidth - 10) {\n tTH.mouseDown = true\n tTH.oldX = event.x\n tTH.oldWidth = tTH.offsetWidth\n }\n }\n function mouseupHanlder(this: ResizerCellElement) {\n if (!tTH) tTH = this\n tTH.mouseDown = false\n tTH.style.cursor = 'default'\n }\n function mousemoveHanlder(this: ResizerCellElement, event: MouseEvent) {\n if (tTH?.mouseDown === true) {\n tTH.style.cursor = 'col-resize'\n const newWidth = tTH.oldWidth + (event.x - tTH.oldX)\n if (newWidth >= limitation.min && newWidth <= limitation.max)\n tTH.style.width = newWidth + 'px'\n } else {\n this.style.cursor = event.offsetX >= this.offsetWidth - 10 ? 'col-resize' : 'default'\n }\n }\n\n const doResizer = (cb: (cell: HTMLTableCellElement) => void) => {\n for (let i = 0; i < table.value.tHead!.rows.length; i++) {\n for (let j = 0; j < table.value.tHead!.rows[i].cells.length; j++) {\n const cell = table.value.tHead!.rows[i].cells[j]\n cb(cell)\n }\n }\n }\n\n const addListener = () => {\n resize && doResizer((cell: HTMLTableCellElement) => {\n cell.addEventListener('mousedown', mousedownHanlder as any)\n cell.addEventListener('mouseup', mouseupHanlder)\n cell.addEventListener('mousemove', mousemoveHanlder as any)\n })\n }\n\n const removeListener = () => {\n resize && doResizer((cell: HTMLTableCellElement) => {\n cell.removeEventListener('mousedown', mousedownHanlder as any)\n cell.removeEventListener('mouseup', mouseupHanlder)\n cell.removeEventListener('mousemove', mousemoveHanlder as any)\n })\n }\n\n watch(() => cols.value.length, () => {\n nextTick(() => {\n removeListener()\n addListener()\n })\n })\n\n onMounted(() => {\n addListener()\n })\n\n onBeforeUnmount(() => {\n removeListener()\n })\n}\n\nexport { useResizer }\n\n\n"],"names":[],"mappings":"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"}