react-resize-demo 1.0.2 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +93 -1
- package/README.md +203 -110
- package/dist/components/ResizeHandle/index.js +92 -0
- package/dist/components/ResizeHandle/index.js.map +1 -0
- package/dist/components/ResizePanel/index.js +33 -0
- package/dist/components/ResizePanel/index.js.map +1 -0
- package/dist/components/ResizePanelGroup/index.js +61 -0
- package/dist/components/ResizePanelGroup/index.js.map +1 -0
- package/dist/components/shared/context.js +35 -0
- package/dist/components/shared/context.js.map +1 -0
- package/dist/esm/components/ResizeHandle/index.js +90 -0
- package/dist/esm/components/ResizeHandle/index.js.map +1 -0
- package/dist/esm/components/ResizePanel/index.js +31 -0
- package/dist/esm/components/ResizePanel/index.js.map +1 -0
- package/dist/esm/components/ResizePanelGroup/index.js +59 -0
- package/dist/esm/components/ResizePanelGroup/index.js.map +1 -0
- package/dist/esm/components/shared/context.js +32 -0
- package/dist/esm/components/shared/context.js.map +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/utils/resizeAble.js +427 -0
- package/dist/esm/utils/resizeAble.js.map +1 -0
- package/dist/esm/utils/virtualNode.js +164 -0
- package/dist/esm/utils/virtualNode.js.map +1 -0
- package/dist/index.js +9 -721
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +68 -2
- package/dist/utils/resizeAble.js +431 -0
- package/dist/utils/resizeAble.js.map +1 -0
- package/dist/utils/virtualNode.js +168 -0
- package/dist/utils/virtualNode.js.map +1 -0
- package/package.json +30 -3
- package/dist/components/ResizeHandle/index.d.ts +0 -8
- package/dist/components/ResizeHandle/index.d.ts.map +0 -1
- package/dist/components/ResizePanel/index.d.ts +0 -19
- package/dist/components/ResizePanel/index.d.ts.map +0 -1
- package/dist/index.d.ts +0 -22
- package/dist/index.d.ts.map +0 -1
- package/dist/index.esm.js +0 -724
- package/dist/index.esm.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/utils/index.d.ts +0 -5
- package/dist/utils/index.d.ts.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/core/virtualNode.js","../src/core/resizeAble.js","../src/components/ResizePanel/index.tsx"],"sourcesContent":["/**\r\n * 虚拟节点管理模块\r\n * 负责创建、更新、销毁虚拟节点,用于虚拟化拖拽\r\n */\r\n\r\nclass VirtualNodeManager {\r\n constructor() {\r\n this.virtualNodes = new Map(); // 存储虚拟节点映射:realEl -> virtualEl\r\n }\r\n\r\n /**\r\n * 创建虚拟节点\r\n * @param {HTMLElement} originalEl - 原始节点\r\n * @param {Object} config - 虚拟化配置\r\n * @param {Object} config.style - 虚拟节点样式\r\n * @param {string} config.className - 虚拟节点类名\r\n * @returns {HTMLElement} 虚拟节点\r\n */\r\n createVirtualNode(originalEl, config = {}) {\r\n if (!originalEl || !originalEl.parentElement) {\r\n return null;\r\n }\r\n\r\n // 如果已存在虚拟节点,先移除\r\n if (this.virtualNodes.has(originalEl)) {\r\n this.removeVirtualNode(originalEl);\r\n }\r\n\r\n // 获取原始节点的位置和尺寸信息\r\n const rect = originalEl.getBoundingClientRect();\r\n const parentRect = originalEl.parentElement.getBoundingClientRect();\r\n const computedStyle = window.getComputedStyle(originalEl);\r\n\r\n // 创建虚拟节点(只复制结构,不复制内容以提高性能)\r\n const virtualEl = originalEl.cloneNode(false); // false 表示不复制子节点\r\n \r\n // 计算相对于父容器的位置\r\n const top = rect.top - parentRect.top + (originalEl.parentElement.scrollTop || 0);\r\n const left = rect.left - parentRect.left + (originalEl.parentElement.scrollLeft || 0);\r\n \r\n // 设置虚拟节点样式\r\n virtualEl.style.cssText = `\r\n position: absolute;\r\n top: ${top}px;\r\n left: ${left}px;\r\n width: ${rect.width}px;\r\n height: ${rect.height}px;\r\n margin: 0;\r\n padding: ${computedStyle.padding};\r\n border: ${computedStyle.border};\r\n box-sizing: ${computedStyle.boxSizing};\r\n pointer-events: none;\r\n z-index: 10000;\r\n opacity: 0.6;\r\n background-color: ${computedStyle.backgroundColor || 'rgba(0, 123, 255, 0.1)'};\r\n overflow: hidden;\r\n box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.3);\r\n `;\r\n\r\n // 应用自定义样式\r\n if (config.style) {\r\n Object.assign(virtualEl.style, config.style);\r\n }\r\n\r\n // 应用自定义类名\r\n if (config.className) {\r\n virtualEl.className = config.className;\r\n }\r\n\r\n // 隐藏原始节点的内容(可选,通过设置透明度)\r\n const originalOpacity = originalEl.style.opacity;\r\n originalEl.style.opacity = '0.3';\r\n originalEl.dataset.originalOpacity = originalOpacity || '';\r\n\r\n // 将虚拟节点插入到父容器中\r\n originalEl.parentElement.appendChild(virtualEl);\r\n\r\n // 存储映射关系\r\n this.virtualNodes.set(originalEl, virtualEl);\r\n\r\n return virtualEl;\r\n }\r\n\r\n /**\r\n * 更新虚拟节点尺寸\r\n * @param {HTMLElement} originalEl - 原始节点\r\n * @param {number} size - 新尺寸\r\n * @param {string} direction - 方向 'horizontal' | 'vertical'\r\n */\r\n updateVirtualNode(originalEl, size, direction) {\r\n const virtualEl = this.virtualNodes.get(originalEl);\r\n if (!virtualEl) return;\r\n\r\n const sizeProperty = direction === 'horizontal' ? 'width' : 'height';\r\n virtualEl.style[sizeProperty] = `${size}px`;\r\n }\r\n\r\n /**\r\n * 更新虚拟节点位置(用于级联调整)\r\n * @param {HTMLElement} originalEl - 原始节点\r\n * @param {number} newPosition - 新位置(绝对位置,不是偏移量)\r\n * @param {string} direction - 方向 'horizontal' | 'vertical'\r\n */\r\n updateVirtualNodePosition(originalEl, newPosition, direction) {\r\n const virtualEl = this.virtualNodes.get(originalEl);\r\n if (!virtualEl) return;\r\n\r\n const positionProperty = direction === 'horizontal' ? 'left' : 'top';\r\n virtualEl.style[positionProperty] = `${newPosition}px`;\r\n }\r\n\r\n /**\r\n * 移除虚拟节点\r\n * @param {HTMLElement} originalEl - 原始节点\r\n */\r\n removeVirtualNode(originalEl) {\r\n const virtualEl = this.virtualNodes.get(originalEl);\r\n if (!virtualEl) return;\r\n\r\n // 恢复原始节点透明度\r\n if (originalEl.dataset.originalOpacity !== undefined) {\r\n originalEl.style.opacity = originalEl.dataset.originalOpacity;\r\n delete originalEl.dataset.originalOpacity;\r\n }\r\n\r\n // 移除虚拟节点\r\n if (virtualEl.parentElement) {\r\n virtualEl.parentElement.removeChild(virtualEl);\r\n }\r\n\r\n // 移除映射关系\r\n this.virtualNodes.delete(originalEl);\r\n }\r\n\r\n /**\r\n * 将最终尺寸应用到真实节点\r\n * @param {HTMLElement} originalEl - 原始节点\r\n * @param {number} finalSize - 最终尺寸\r\n * @param {string} direction - 方向 'horizontal' | 'vertical'\r\n */\r\n applyToRealNode(originalEl, finalSize, direction) {\r\n const sizeProperty = direction === 'horizontal' ? 'width' : 'height';\r\n originalEl.style[sizeProperty] = `${finalSize}px`;\r\n }\r\n\r\n /**\r\n * 移除所有虚拟节点\r\n */\r\n removeAllVirtualNodes() {\r\n const nodesToRemove = Array.from(this.virtualNodes.keys());\r\n nodesToRemove.forEach(originalEl => {\r\n this.removeVirtualNode(originalEl);\r\n });\r\n this.virtualNodes.clear();\r\n }\r\n\r\n /**\r\n * 检查是否存在虚拟节点\r\n * @param {HTMLElement} originalEl - 原始节点\r\n * @returns {boolean}\r\n */\r\n hasVirtualNode(originalEl) {\r\n return this.virtualNodes.has(originalEl);\r\n }\r\n\r\n /**\r\n * 获取虚拟节点\r\n * @param {HTMLElement} originalEl - 原始节点\r\n * @returns {HTMLElement|null}\r\n */\r\n getVirtualNode(originalEl) {\r\n return this.virtualNodes.get(originalEl) || null;\r\n }\r\n\r\n /**\r\n * 销毁管理器,清理所有资源\r\n */\r\n destroy() {\r\n this.removeAllVirtualNodes();\r\n }\r\n}\r\n\r\nexport default VirtualNodeManager;\r\n\r\n","// @ts-expect-error - VirtualNodeManager is a JS file\r\nimport VirtualNodeManager from './virtualNode';\r\n\r\nclass ResizeAbleCore {\r\n constructor(options) {\r\n this.prePanelEl = options.prePanelEl;\r\n this.nextPanelEl = options.nextPanelEl;\r\n this.getPanelInfo = options.getPanelInfo;\r\n this.prePanelIndex = options.prePanelIndex;\r\n this.nextPanelIndex = options.nextPanelIndex;\r\n this.direction = options.direction;\r\n this.virtualEnabled = options.virtualEnabled || false;\r\n this.virtualConfig = options.virtualConfig || {};\r\n\r\n this.isResizing = false;\r\n this.startPos = 0;\r\n this.prePanelStartSize = 0;\r\n this.nextPanelStartSize = 0;\r\n this.allPanelsStartSizes = new Map();\r\n this.allPanelsStartPositions = new Map(); // 记录面板初始位置(虚拟化模式使用)\r\n this.handleSize = options.handleSize || 0; // 拖拽器尺寸(宽度或高度,根据方向)\r\n \r\n // 如果启用虚拟化,创建虚拟节点管理器\r\n if (this.virtualEnabled) {\r\n this.virtualNodeManager = new VirtualNodeManager();\r\n }\r\n }\r\n startResize() {\r\n console.log(11111)\r\n // 设置开始拖拽\r\n this.isResizing = true;\r\n\r\n // 记录前一个面板的开始大小\r\n this.prePanelStartSize = this.getSize(this.prePanelEl)\r\n this.allPanelsStartSizes.set(this.prePanelIndex, this.prePanelStartSize);\r\n // 记录后一个面板的开始大小\r\n this.nextPanelStartSize = this.getSize(this.nextPanelEl)\r\n this.allPanelsStartSizes.set(this.nextPanelIndex, this.nextPanelStartSize);\r\n \r\n // 根据方向设置尺寸属性\r\n const sizeProperty = this.direction === 'horizontal' ? 'width' : 'height';\r\n \r\n if (this.virtualEnabled && this.virtualNodeManager) {\r\n // 虚拟化模式:创建虚拟节点并记录初始位置\r\n const prePos = this.getPosition(this.prePanelEl);\r\n this.allPanelsStartPositions.set(this.prePanelIndex, prePos);\r\n this.virtualNodeManager.createVirtualNode(this.prePanelEl, this.virtualConfig);\r\n \r\n const nextPos = this.getPosition(this.nextPanelEl);\r\n this.allPanelsStartPositions.set(this.nextPanelIndex, nextPos);\r\n this.virtualNodeManager.createVirtualNode(this.nextPanelEl, this.virtualConfig);\r\n\r\n // 记录前面面板的初始尺寸和位置并创建虚拟节点\r\n let prevIndex = this.prePanelIndex - 1;\r\n while (prevIndex >= 0) {\r\n const panelInfo = this.getPanelInfo(prevIndex);\r\n if (!panelInfo) break;\r\n\r\n const size = this.getSize(panelInfo.panelEl);\r\n const pos = this.getPosition(panelInfo.panelEl);\r\n this.allPanelsStartSizes.set(prevIndex, size);\r\n this.allPanelsStartPositions.set(prevIndex, pos);\r\n this.virtualNodeManager.createVirtualNode(panelInfo.panelEl, this.virtualConfig);\r\n prevIndex--;\r\n }\r\n\r\n // 记录后续面板的初始尺寸和位置并创建虚拟节点\r\n let nextIndex = this.nextPanelIndex + 1;\r\n let nextPanelInfo = this.getPanelInfo(nextIndex);\r\n while (nextPanelInfo) {\r\n const size = this.getSize(nextPanelInfo.panelEl);\r\n const pos = this.getPosition(nextPanelInfo.panelEl);\r\n this.allPanelsStartSizes.set(nextIndex, size);\r\n this.allPanelsStartPositions.set(nextIndex, pos);\r\n this.virtualNodeManager.createVirtualNode(nextPanelInfo.panelEl, this.virtualConfig);\r\n nextIndex++;\r\n nextPanelInfo = this.getPanelInfo(nextIndex);\r\n }\r\n } else {\r\n // 非虚拟化模式:直接操作真实节点\r\n // 禁用flex\r\n this.prePanelEl.style.flex = 'none';\r\n this.prePanelEl.style[sizeProperty] = `${this.prePanelStartSize}px`;\r\n this.nextPanelEl.style.flex = 'none';\r\n this.nextPanelEl.style[sizeProperty] = `${this.nextPanelStartSize}px`;\r\n\r\n // 记录前面面板的初始尺寸(用于向前拖拽时的级联调整)\r\n let prevIndex = this.prePanelIndex - 1;\r\n while (prevIndex >= 0) {\r\n const panelInfo = this.getPanelInfo(prevIndex);\r\n if (!panelInfo) break;\r\n\r\n const size = this.getSize(panelInfo.panelEl);\r\n this.allPanelsStartSizes.set(prevIndex, size);\r\n panelInfo.panelEl.style.flex = 'none';\r\n panelInfo.panelEl.style[sizeProperty] = `${size}px`;\r\n prevIndex--;\r\n }\r\n\r\n // 记录后续面板的初始尺寸(用于向后拖拽时的级联调整)\r\n let nextIndex = this.nextPanelIndex + 1;\r\n let nextPanelInfo = this.getPanelInfo(nextIndex);\r\n while (nextPanelInfo) {\r\n const size = this.getSize(nextPanelInfo.panelEl);\r\n this.allPanelsStartSizes.set(nextIndex, size);\r\n nextPanelInfo.panelEl.style.flex = 'none';\r\n nextPanelInfo.panelEl.style[sizeProperty] = `${size}px`;\r\n nextIndex++;\r\n nextPanelInfo = this.getPanelInfo(nextIndex);\r\n }\r\n }\r\n }\r\n onResize(delta) {\r\n if (!this.isResizing) return;\r\n\r\n if (delta > 0) {\r\n // 向后拖拽(水平布局向右,垂直布局向下):扩大前一个面板,缩小后一个面板\r\n this.adjustPanelsNext(delta);\r\n } else {\r\n // 向前拖拽(水平布局向左,垂直布局向上):缩小前一个面板,扩大后一个面板\r\n // 将负数转为正数处理\r\n this.adjustPanelsPre(-delta);\r\n }\r\n }\r\n adjustPanelsNext(delta) {\r\n console.log('next', 'kkkkkkk')\r\n let remainingDelta = delta;\r\n const sizeProperty = this.direction === 'horizontal' ? 'width' : 'height';\r\n\r\n // 尝试从后一个面板获取空间\r\n const nextPanelInfo = this.getPanelInfo(this.nextPanelIndex);\r\n if (nextPanelInfo) {\r\n const nextStartSize = this.allPanelsStartSizes.get(this.nextPanelIndex);\r\n const targetNextSize = nextStartSize - remainingDelta;\r\n const newNextSize = Math.max(nextPanelInfo.minSize, targetNextSize);\r\n const actualReduction = nextStartSize - newNextSize;\r\n\r\n // 虚拟化模式下更新虚拟节点,否则更新真实节点\r\n if (this.virtualEnabled && this.virtualNodeManager) {\r\n this.virtualNodeManager.updateVirtualNode(this.nextPanelEl, newNextSize, this.direction);\r\n } else {\r\n this.nextPanelEl.style[sizeProperty] = `${newNextSize}px`;\r\n }\r\n remainingDelta -= actualReduction;\r\n }\r\n\r\n console.log(remainingDelta, 'kkkkkk')\r\n\r\n // 如果后一个面板达到了最小值,继续从后续的面板中获取空间\r\n if (remainingDelta > 0) {\r\n let nextIndex = this.nextPanelIndex + 1;\r\n while (remainingDelta > 0) {\r\n const nextPanelInfo = this.getPanelInfo(nextIndex);\r\n if (!nextPanelInfo) break;\r\n const nextStartSize = this.allPanelsStartSizes.get(nextIndex);\r\n const targetNextSize = nextStartSize - remainingDelta;\r\n const newNextSize = Math.max(nextPanelInfo.minSize, targetNextSize);\r\n const actualReduction = nextStartSize - newNextSize;\r\n \r\n // 虚拟化模式下更新虚拟节点,否则更新真实节点\r\n if (this.virtualEnabled && this.virtualNodeManager) {\r\n this.virtualNodeManager.updateVirtualNode(nextPanelInfo.panelEl, newNextSize, this.direction);\r\n } else {\r\n nextPanelInfo.panelEl.style[sizeProperty] = `${newNextSize}px`;\r\n }\r\n remainingDelta -= actualReduction;\r\n if (newNextSize <= nextPanelInfo.minSize && remainingDelta > 0) {\r\n nextIndex++\r\n } else {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // 扩大前一个面板\r\n const prePanelInfo = this.getPanelInfo(this.prePanelIndex);\r\n if (prePanelInfo) {\r\n const preStartSize = this.allPanelsStartSizes.get(this.prePanelIndex);\r\n const actualGained = delta - remainingDelta; // 实际获得的尺寸\r\n const newPreSize = preStartSize + actualGained;\r\n \r\n // 虚拟化模式下更新虚拟节点,否则更新真实节点\r\n if (this.virtualEnabled && this.virtualNodeManager) {\r\n this.virtualNodeManager.updateVirtualNode(this.prePanelEl, newPreSize, this.direction);\r\n \r\n // 重新计算所有面板的位置(基于尺寸变化)\r\n this.recalculateAllPanelsPositions();\r\n } else {\r\n this.prePanelEl.style[sizeProperty] = `${newPreSize}px`;\r\n }\r\n }\r\n }\r\n adjustPanelsPre(delta) {\r\n // 向前拖拽(水平布局向左,垂直布局向上):缩小前一个面板,扩大后一个面板\r\n // delta 此时是正数(表示向前拖拽的距离)\r\n let remainingDelta = delta;\r\n let totalReduced = 0; // 记录从前一个面板实际减少的尺寸总和\r\n const sizeProperty = this.direction === 'horizontal' ? 'width' : 'height';\r\n \r\n // 先尝试缩小前一个面板\r\n const prePanelInfo = this.getPanelInfo(this.prePanelIndex);\r\n if (prePanelInfo) {\r\n const preStartSize = this.allPanelsStartSizes.get(this.prePanelIndex);\r\n const targetPreSize = preStartSize - remainingDelta;\r\n const newPreSize = Math.max(prePanelInfo.minSize, targetPreSize);\r\n const actualReduction = preStartSize - newPreSize;\r\n \r\n // 虚拟化模式下更新虚拟节点,否则更新真实节点\r\n if (this.virtualEnabled && this.virtualNodeManager) {\r\n this.virtualNodeManager.updateVirtualNode(this.prePanelEl, newPreSize, this.direction);\r\n } else {\r\n this.prePanelEl.style[sizeProperty] = `${newPreSize}px`;\r\n }\r\n totalReduced += actualReduction;\r\n remainingDelta -= actualReduction;\r\n }\r\n \r\n // 如果前一个面板达到最小值,继续缩小更前面的面板(prevPanel)\r\n // 这样可以实现\"依次后延\"的效果\r\n if (remainingDelta > 0) {\r\n let prevIndex = this.prePanelIndex - 1;\r\n console.log(prevIndex, this.prePanelIndex, 'kkkkkkkk')\r\n while (remainingDelta > 0 && prevIndex >= 0) {\r\n const prevPanelInfo = this.getPanelInfo(prevIndex);\r\n if (!prevPanelInfo) break;\r\n \r\n const prevStartSize = this.allPanelsStartSizes.get(prevIndex);\r\n if (prevStartSize === undefined) break;\r\n \r\n const targetPrevSize = prevStartSize - remainingDelta;\r\n const newPrevSize = Math.max(prevPanelInfo.minSize, targetPrevSize);\r\n const actualReduction = prevStartSize - newPrevSize;\r\n \r\n // 虚拟化模式下更新虚拟节点,否则更新真实节点\r\n if (this.virtualEnabled && this.virtualNodeManager) {\r\n this.virtualNodeManager.updateVirtualNode(prevPanelInfo.panelEl, newPrevSize, this.direction);\r\n } else {\r\n prevPanelInfo.panelEl.style[sizeProperty] = `${newPrevSize}px`;\r\n }\r\n totalReduced += actualReduction; // 将这部分空间也加到后一个面板\r\n remainingDelta -= actualReduction;\r\n \r\n if (newPrevSize <= prevPanelInfo.minSize && remainingDelta > 0) {\r\n prevIndex--; // 继续向前查找\r\n } else {\r\n break;\r\n }\r\n }\r\n }\r\n \r\n // 扩大后一个面板(使用实际减少的尺寸)\r\n const nextPanelInfo = this.getPanelInfo(this.nextPanelIndex);\r\n if (nextPanelInfo) {\r\n const nextStartSize = this.allPanelsStartSizes.get(this.nextPanelIndex);\r\n const newNextSize = nextStartSize + totalReduced;\r\n \r\n // 虚拟化模式下更新虚拟节点,否则更新真实节点\r\n if (this.virtualEnabled && this.virtualNodeManager) {\r\n this.virtualNodeManager.updateVirtualNode(this.nextPanelEl, newNextSize, this.direction);\r\n \r\n // 重新计算所有面板的位置(基于尺寸变化)\r\n this.recalculateAllPanelsPositions();\r\n } else {\r\n this.nextPanelEl.style[sizeProperty] = `${newNextSize}px`;\r\n }\r\n }\r\n }\r\n /**\r\n * 重新计算所有面板的位置(虚拟化模式使用)\r\n * 基于每个面板的初始位置和前面所有面板的尺寸变化\r\n */\r\n recalculateAllPanelsPositions() {\r\n if (!this.virtualEnabled || !this.virtualNodeManager) return;\r\n \r\n // 从第一个面板开始,顺序计算每个面板的新位置\r\n // 使用累积方式:从第一个面板的初始位置开始,依次加上每个面板的当前尺寸和拖拽器尺寸\r\n const firstPanelStartPos = this.allPanelsStartPositions.get(0) || 0;\r\n let currentPosition = firstPanelStartPos;\r\n \r\n let index = 0;\r\n let panelInfo = this.getPanelInfo(index);\r\n while (panelInfo) {\r\n const startPos = this.allPanelsStartPositions.get(index);\r\n \r\n if (startPos !== undefined) {\r\n // 获取虚拟节点\r\n const virtualEl = this.virtualNodeManager.getVirtualNode(panelInfo.panelEl);\r\n if (virtualEl) {\r\n // 如果是第一个面板,使用初始位置\r\n if (index === 0) {\r\n currentPosition = startPos;\r\n } else {\r\n // 对于后续面板,使用累积方式计算位置\r\n // 从第一个面板开始,累积所有前面面板的尺寸和拖拽器尺寸\r\n currentPosition = firstPanelStartPos;\r\n for (let i = 0; i < index; i++) {\r\n const prevInfo = this.getPanelInfo(i);\r\n if (prevInfo) {\r\n const prevVEl = this.virtualNodeManager.getVirtualNode(prevInfo.panelEl);\r\n if (prevVEl) {\r\n const prevSize = this.direction === 'horizontal' \r\n ? prevVEl.offsetWidth \r\n : prevVEl.offsetHeight;\r\n currentPosition += prevSize + this.handleSize;\r\n }\r\n }\r\n }\r\n }\r\n \r\n // 更新虚拟节点的位置\r\n this.virtualNodeManager.updateVirtualNodePosition(panelInfo.panelEl, currentPosition, this.direction);\r\n }\r\n }\r\n \r\n index++;\r\n panelInfo = this.getPanelInfo(index);\r\n }\r\n }\r\n getSize(el) {\r\n return this.direction === 'horizontal' ? el.offsetWidth : el.offsetHeight;\r\n }\r\n getPosition(el) {\r\n // 获取元素相对于父容器的位置\r\n if (this.direction === 'horizontal') {\r\n return el.offsetLeft;\r\n } else {\r\n return el.offsetTop;\r\n }\r\n }\r\n endResize() {\r\n this.isResizing = false;\r\n \r\n if (this.virtualEnabled && this.virtualNodeManager) {\r\n // 虚拟化模式:将最终尺寸应用到真实节点\r\n const sizeProperty = this.direction === 'horizontal' ? 'width' : 'height';\r\n \r\n // 获取所有虚拟节点的最终尺寸并应用到真实节点\r\n this.allPanelsStartSizes.forEach((startSize, index) => {\r\n const panelInfo = this.getPanelInfo(index);\r\n if (!panelInfo) return;\r\n \r\n const virtualEl = this.virtualNodeManager.getVirtualNode(panelInfo.panelEl);\r\n if (virtualEl) {\r\n const finalSize = this.direction === 'horizontal' \r\n ? virtualEl.offsetWidth \r\n : virtualEl.offsetHeight;\r\n \r\n // 应用最终尺寸到真实节点\r\n panelInfo.panelEl.style.flex = 'none';\r\n panelInfo.panelEl.style[sizeProperty] = `${finalSize}px`;\r\n }\r\n });\r\n \r\n // 清理所有虚拟节点\r\n this.virtualNodeManager.removeAllVirtualNodes();\r\n }\r\n \r\n this.allPanelsStartSizes.clear();\r\n }\r\n destroy() {\r\n this.endResize();\r\n // 清理虚拟节点管理器\r\n if (this.virtualNodeManager) {\r\n this.virtualNodeManager.destroy();\r\n }\r\n }\r\n}\r\n\r\nexport default ResizeAbleCore;","import React, { useRef, useEffect, useContext } from 'react';\n// @ts-expect-error - ResizeAbleCore is a JS file\nimport ResizeAbleCore from '../../core/resizeAble';\n\ninterface PanelInfo {\n panelEl: HTMLElement;\n minSize: number;\n}\n\nexport interface VirtualConfig {\n enabled?: boolean;\n style?: React.CSSProperties;\n className?: string;\n}\n\nconst ResizeableContext = React.createContext<{\n panelCount: number;\n registerPanel: (panelEl: HTMLElement, minSize: number) => number; // 返回索引\n unregisterPanel: (panelEl: HTMLElement) => void;\n getPanelInfo: (index: number) => PanelInfo | null;\n getPanelIndex: (panelEl: HTMLElement) => number;\n direction: string;\n panelInfos: PanelInfo[];\n virtualConfig: VirtualConfig;\n}>({\n panelCount: 0,\n registerPanel: () => 0,\n unregisterPanel: () => {},\n getPanelInfo: () => null,\n getPanelIndex: () => -1,\n direction: 'horizontal',\n panelInfos: [],\n virtualConfig: { enabled: false },\n})\n\nexport const ResizeablePanelGroup: React.FC<{\n children: React.ReactNode;\n direction?: 'horizontal' | 'vertical';\n virtual?: boolean; // 是否启用虚拟化,默认false\n virtualConfig?: VirtualConfig; // 虚拟化配置\n style?: React.CSSProperties;\n}> = ({\n children,\n direction = 'horizontal',\n style,\n virtual = false,\n virtualConfig = {},\n}) => {\n const panelInfos = useRef<PanelInfo[]>([]);\n const [panelCount, setPanelCount] = React.useState(0);\n \n const registerPanel = React.useCallback((panelEl: HTMLElement, minSize: number): number => {\n const index = panelInfos.current.length;\n panelInfos.current.push({ panelEl, minSize });\n setPanelCount(panelInfos.current.length);\n console.log(panelInfos.current, 'panelInfos.current')\n return index;\n }, []);\n \n const unregisterPanel = React.useCallback((panelEl: HTMLElement) => {\n panelInfos.current = panelInfos.current.filter(info => info.panelEl !== panelEl);\n setPanelCount(panelInfos.current.length);\n }, []);\n \n const getPanelInfo = (index: number): PanelInfo | null => {\n return panelInfos.current[index] || null;\n }\n \n const getPanelIndex = (panelEl: HTMLElement): number => {\n return panelInfos.current.findIndex(info => info.panelEl === panelEl);\n }\n\n const childrenArray = React.Children.toArray(children);\n const panelsWithHandles: React.ReactNode[] = [];\n console.log(childrenArray, panelInfos.current, 'childrenArray')\n\n childrenArray.forEach((child, index) => {\n panelsWithHandles.push(child);\n \n // 在面板之间插入拖拽器(最后一个面板后不插入)\n if (index < childrenArray.length - 1) {\n panelsWithHandles.push(\n <ResizeHandle\n key={`handle-${index}`}\n prePanelIndex={index}\n nextPanelIndex={index + 1}\n direction={direction}\n />\n );\n }\n });\n\n // 合并虚拟化配置\n const mergedVirtualConfig: VirtualConfig = {\n enabled: virtual,\n ...virtualConfig,\n };\n\n return (\n <ResizeableContext.Provider value={{ \n panelCount: panelCount,\n registerPanel, \n unregisterPanel,\n getPanelInfo,\n getPanelIndex,\n direction,\n panelInfos: panelInfos.current,\n virtualConfig: mergedVirtualConfig,\n }}>\n <div style={{\n display: 'flex',\n flexDirection: direction === 'horizontal' ? 'row' : 'column',\n height: '100%',\n position: 'relative', // 为虚拟节点定位提供参考\n ...style,\n }}>\n {panelsWithHandles}\n </div>\n </ResizeableContext.Provider>\n )\n}\n\n\nexport const ResizeablePanel: React.FC<{\n children: React.ReactNode;\n minSize?: number;\n onResize?: (width: number) => void;\n}> = ({\n children,\n minSize = 100,\n // onResize, // 暂时未使用,保留以备将来使用\n}) => {\n const panelRef = useRef<HTMLDivElement>(null);\n const panelIndexRef = useRef<number>(-1);\n const { registerPanel, unregisterPanel, direction } = useContext(ResizeableContext);\n \n useEffect(() => {\n if(!panelRef.current) return;\n const panelEl = panelRef.current;\n panelIndexRef.current = registerPanel(panelEl, minSize);\n return () => {\n unregisterPanel(panelEl);\n }\n }, [minSize, registerPanel, unregisterPanel]);\n\n return (\n <div\n ref = {panelRef}\n style={{\n flex: 1,\n minWidth: direction === 'horizontal' ? minSize : undefined,\n minHeight: direction === 'vertical' ? minSize : undefined,\n width: 'auto',\n overflow: 'hidden',\n position: 'relative',\n }}\n >\n <div style={{height: '100%', padding: 16}}>\n {children}\n </div>\n </div>\n )\n}\n\nconst ResizeHandle: React.FC<{\n prePanelIndex: number;\n nextPanelIndex: number;\n direction: string;\n}> = ({\n prePanelIndex,\n nextPanelIndex,\n direction,\n}) => {\n const handleRef = useRef<HTMLDivElement>(null);\n const coreInstanceRef = useRef<InstanceType<typeof ResizeAbleCore> | null>(null);\n const { getPanelInfo, panelCount, virtualConfig } = useContext(ResizeableContext);\n\n useEffect(() => {\n // 确保所需的面板索引都已注册\n // 需要确保 nextPanelIndex 对应的面板已经注册(因为索引从0开始,所以需要 >= nextPanelIndex + 1)\n if (panelCount <= nextPanelIndex || !handleRef.current) {\n return;\n }\n \n const prePanelInfo = getPanelInfo(prePanelIndex);\n const nextPanelInfo = getPanelInfo(nextPanelIndex);\n if(!prePanelInfo || !nextPanelInfo) return;\n \n // 获取拖拽器的尺寸\n const handleSize = handleRef.current \n ? (direction === 'horizontal' \n ? handleRef.current.offsetWidth \n : handleRef.current.offsetHeight)\n : (direction === 'horizontal' ? 10 : 10); // 默认10px\n \n coreInstanceRef.current = new ResizeAbleCore({\n prePanelEl: prePanelInfo.panelEl,\n nextPanelEl: nextPanelInfo.panelEl,\n getPanelInfo,\n prePanelIndex,\n nextPanelIndex,\n direction,\n virtualEnabled: virtualConfig.enabled || false,\n virtualConfig: {\n style: virtualConfig.style,\n className: virtualConfig.className,\n },\n handleSize, // 传递拖拽器尺寸\n });\n\n // 将拖拽器的开始/移动/结束事件绑定至核心类\n const handleEl = handleRef.current;\n let isResizing = false;\n let startPos = 0;\n\n const startResize = (e: MouseEvent) => {\n console.log(9999999)\n e.preventDefault();\n isResizing = true;\n startPos = direction === 'horizontal' ? e.clientX : e.clientY;\n if (coreInstanceRef.current) {\n coreInstanceRef.current.startResize();\n }\n };\n const onResizeMove = (e: MouseEvent) => {\n if(!isResizing || !coreInstanceRef.current) return;\n const currentPos = direction === 'horizontal' ? e.clientX : e.clientY;\n const delta = currentPos - startPos;\n coreInstanceRef.current.onResize(delta);\n };\n const endResize = () => {\n if(isResizing && coreInstanceRef.current) {\n isResizing = false;\n coreInstanceRef.current.endResize();\n }\n }\n handleEl.addEventListener('mousedown', startResize);\n document.addEventListener('mousemove', onResizeMove);\n document.addEventListener('mouseup', endResize);\n return () => {\n handleEl.removeEventListener('mousedown', startResize);\n document.removeEventListener('mousemove', onResizeMove);\n document.removeEventListener('mouseup', endResize);\n if(coreInstanceRef.current) {\n coreInstanceRef.current.destroy();\n }\n }\n }, [prePanelIndex, nextPanelIndex, direction, getPanelInfo, panelCount, virtualConfig]);\n\n\n const isHorizontal = direction === 'horizontal';\n return (\n <div\n ref={handleRef}\n style={{\n position: 'relative',\n width: isHorizontal ? '10px' : '100%',\n height: isHorizontal ? '100%' : '10px',\n backgroundColor: '#000',\n cursor: isHorizontal ? 'ew-resize' : 'ns-resize',\n zIndex: 1000,\n flexShrink: 0,\n }}\n />\n )\n}"],"names":["useRef","_jsx","useContext","useEffect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,71 @@
|
|
|
1
|
-
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 面板信息接口
|
|
5
|
+
*/
|
|
6
|
+
interface PanelInfo {
|
|
7
|
+
panelEl: HTMLElement;
|
|
8
|
+
minSize: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 虚拟化配置接口
|
|
12
|
+
*/
|
|
13
|
+
interface VirtualConfig {
|
|
14
|
+
enabled?: boolean;
|
|
15
|
+
style?: React.CSSProperties;
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 虚拟节点配置接口(用于虚拟节点管理器)
|
|
20
|
+
*/
|
|
21
|
+
interface VirtualNodeConfig {
|
|
22
|
+
style?: React.CSSProperties;
|
|
2
23
|
className?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 调整方向类型
|
|
27
|
+
*/
|
|
28
|
+
type ResizeDirection = 'horizontal' | 'vertical';
|
|
29
|
+
/**
|
|
30
|
+
* ResizeAbleCore 选项接口
|
|
31
|
+
*/
|
|
32
|
+
interface ResizeAbleCoreOptions {
|
|
33
|
+
prePanelEl: HTMLElement;
|
|
34
|
+
nextPanelEl: HTMLElement;
|
|
35
|
+
getPanelInfo: (index: number) => PanelInfo | null;
|
|
36
|
+
prePanelIndex: number;
|
|
37
|
+
nextPanelIndex: number;
|
|
38
|
+
direction: ResizeDirection;
|
|
39
|
+
virtualEnabled?: boolean;
|
|
40
|
+
virtualConfig?: VirtualNodeConfig;
|
|
41
|
+
handleSize?: number;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* 可调整大小的面板组容器组件
|
|
46
|
+
* 负责管理多个面板的布局和拖拽手柄的插入
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
interface ResizePanelGroupProps {
|
|
50
|
+
children: React.ReactNode;
|
|
51
|
+
direction?: ResizeDirection;
|
|
52
|
+
virtual?: boolean;
|
|
53
|
+
virtualConfig?: VirtualConfig;
|
|
3
54
|
style?: React.CSSProperties;
|
|
4
55
|
}
|
|
5
|
-
|
|
56
|
+
declare const ResizePanelGroup: React.FC<ResizePanelGroupProps>;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* 可调整大小的面板组件
|
|
60
|
+
* 负责展示面板内容和管理面板的注册/注销
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
interface ResizePanelProps {
|
|
64
|
+
children: React.ReactNode;
|
|
65
|
+
minSize?: number;
|
|
66
|
+
onResize?: (width: number) => void;
|
|
67
|
+
}
|
|
68
|
+
declare const ResizePanel: React.FC<ResizePanelProps>;
|
|
69
|
+
|
|
70
|
+
export { ResizePanel as ResizablePanel, ResizePanelGroup as ResizablePanelGroup, ResizePanel as ResizeablePanel, ResizePanelGroup as ResizeablePanelGroup };
|
|
71
|
+
export type { PanelInfo, ResizeAbleCoreOptions, ResizeDirection, VirtualConfig, VirtualNodeConfig };
|
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var virtualNode = require('./virtualNode.js');
|
|
6
|
+
|
|
7
|
+
class ResizeAbleCore {
|
|
8
|
+
constructor(options) {
|
|
9
|
+
Object.defineProperty(this, "prePanelEl", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
configurable: true,
|
|
12
|
+
writable: true,
|
|
13
|
+
value: void 0
|
|
14
|
+
});
|
|
15
|
+
Object.defineProperty(this, "nextPanelEl", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
configurable: true,
|
|
18
|
+
writable: true,
|
|
19
|
+
value: void 0
|
|
20
|
+
});
|
|
21
|
+
Object.defineProperty(this, "getPanelInfo", {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
configurable: true,
|
|
24
|
+
writable: true,
|
|
25
|
+
value: void 0
|
|
26
|
+
});
|
|
27
|
+
Object.defineProperty(this, "prePanelIndex", {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
configurable: true,
|
|
30
|
+
writable: true,
|
|
31
|
+
value: void 0
|
|
32
|
+
});
|
|
33
|
+
Object.defineProperty(this, "nextPanelIndex", {
|
|
34
|
+
enumerable: true,
|
|
35
|
+
configurable: true,
|
|
36
|
+
writable: true,
|
|
37
|
+
value: void 0
|
|
38
|
+
});
|
|
39
|
+
Object.defineProperty(this, "direction", {
|
|
40
|
+
enumerable: true,
|
|
41
|
+
configurable: true,
|
|
42
|
+
writable: true,
|
|
43
|
+
value: void 0
|
|
44
|
+
});
|
|
45
|
+
Object.defineProperty(this, "virtualEnabled", {
|
|
46
|
+
enumerable: true,
|
|
47
|
+
configurable: true,
|
|
48
|
+
writable: true,
|
|
49
|
+
value: void 0
|
|
50
|
+
});
|
|
51
|
+
Object.defineProperty(this, "virtualConfig", {
|
|
52
|
+
enumerable: true,
|
|
53
|
+
configurable: true,
|
|
54
|
+
writable: true,
|
|
55
|
+
value: void 0
|
|
56
|
+
});
|
|
57
|
+
Object.defineProperty(this, "isResizing", {
|
|
58
|
+
enumerable: true,
|
|
59
|
+
configurable: true,
|
|
60
|
+
writable: true,
|
|
61
|
+
value: false
|
|
62
|
+
});
|
|
63
|
+
Object.defineProperty(this, "prePanelStartSize", {
|
|
64
|
+
enumerable: true,
|
|
65
|
+
configurable: true,
|
|
66
|
+
writable: true,
|
|
67
|
+
value: 0
|
|
68
|
+
});
|
|
69
|
+
Object.defineProperty(this, "nextPanelStartSize", {
|
|
70
|
+
enumerable: true,
|
|
71
|
+
configurable: true,
|
|
72
|
+
writable: true,
|
|
73
|
+
value: 0
|
|
74
|
+
});
|
|
75
|
+
Object.defineProperty(this, "allPanelsStartSizes", {
|
|
76
|
+
enumerable: true,
|
|
77
|
+
configurable: true,
|
|
78
|
+
writable: true,
|
|
79
|
+
value: new Map()
|
|
80
|
+
});
|
|
81
|
+
Object.defineProperty(this, "allPanelsStartPositions", {
|
|
82
|
+
enumerable: true,
|
|
83
|
+
configurable: true,
|
|
84
|
+
writable: true,
|
|
85
|
+
value: new Map()
|
|
86
|
+
}); // 记录面板初始位置(虚拟化模式使用)
|
|
87
|
+
Object.defineProperty(this, "handleSize", {
|
|
88
|
+
enumerable: true,
|
|
89
|
+
configurable: true,
|
|
90
|
+
writable: true,
|
|
91
|
+
value: void 0
|
|
92
|
+
}); // 拖拽器尺寸(宽度或高度,根据方向)
|
|
93
|
+
Object.defineProperty(this, "virtualNodeManager", {
|
|
94
|
+
enumerable: true,
|
|
95
|
+
configurable: true,
|
|
96
|
+
writable: true,
|
|
97
|
+
value: null
|
|
98
|
+
});
|
|
99
|
+
this.prePanelEl = options.prePanelEl;
|
|
100
|
+
this.nextPanelEl = options.nextPanelEl;
|
|
101
|
+
this.getPanelInfo = options.getPanelInfo;
|
|
102
|
+
this.prePanelIndex = options.prePanelIndex;
|
|
103
|
+
this.nextPanelIndex = options.nextPanelIndex;
|
|
104
|
+
this.direction = options.direction;
|
|
105
|
+
this.virtualEnabled = options.virtualEnabled || false;
|
|
106
|
+
this.virtualConfig = options.virtualConfig || {};
|
|
107
|
+
this.handleSize = options.handleSize || 0;
|
|
108
|
+
// 如果启用虚拟化,创建虚拟节点管理器
|
|
109
|
+
if (this.virtualEnabled) {
|
|
110
|
+
this.virtualNodeManager = new virtualNode.default();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
startResize() {
|
|
114
|
+
// 设置开始拖拽
|
|
115
|
+
this.isResizing = true;
|
|
116
|
+
// 记录前一个面板的开始大小
|
|
117
|
+
this.prePanelStartSize = this.getSize(this.prePanelEl);
|
|
118
|
+
this.allPanelsStartSizes.set(this.prePanelIndex, this.prePanelStartSize);
|
|
119
|
+
// 记录后一个面板的开始大小
|
|
120
|
+
this.nextPanelStartSize = this.getSize(this.nextPanelEl);
|
|
121
|
+
this.allPanelsStartSizes.set(this.nextPanelIndex, this.nextPanelStartSize);
|
|
122
|
+
// 根据方向设置尺寸属性
|
|
123
|
+
const sizeProperty = this.direction === 'horizontal' ? 'width' : 'height';
|
|
124
|
+
if (this.virtualEnabled && this.virtualNodeManager) {
|
|
125
|
+
// 虚拟化模式:创建虚拟节点并记录初始位置
|
|
126
|
+
const prePos = this.getPosition(this.prePanelEl);
|
|
127
|
+
this.allPanelsStartPositions.set(this.prePanelIndex, prePos);
|
|
128
|
+
this.virtualNodeManager.createVirtualNode(this.prePanelEl, this.virtualConfig);
|
|
129
|
+
const nextPos = this.getPosition(this.nextPanelEl);
|
|
130
|
+
this.allPanelsStartPositions.set(this.nextPanelIndex, nextPos);
|
|
131
|
+
this.virtualNodeManager.createVirtualNode(this.nextPanelEl, this.virtualConfig);
|
|
132
|
+
// 记录前面面板的初始尺寸和位置并创建虚拟节点
|
|
133
|
+
let prevIndex = this.prePanelIndex - 1;
|
|
134
|
+
while (prevIndex >= 0) {
|
|
135
|
+
const panelInfo = this.getPanelInfo(prevIndex);
|
|
136
|
+
if (!panelInfo)
|
|
137
|
+
break;
|
|
138
|
+
const size = this.getSize(panelInfo.panelEl);
|
|
139
|
+
const pos = this.getPosition(panelInfo.panelEl);
|
|
140
|
+
this.allPanelsStartSizes.set(prevIndex, size);
|
|
141
|
+
this.allPanelsStartPositions.set(prevIndex, pos);
|
|
142
|
+
this.virtualNodeManager.createVirtualNode(panelInfo.panelEl, this.virtualConfig);
|
|
143
|
+
prevIndex--;
|
|
144
|
+
}
|
|
145
|
+
// 记录后续面板的初始尺寸和位置并创建虚拟节点
|
|
146
|
+
let nextIndex = this.nextPanelIndex + 1;
|
|
147
|
+
let nextPanelInfo = this.getPanelInfo(nextIndex);
|
|
148
|
+
while (nextPanelInfo) {
|
|
149
|
+
const size = this.getSize(nextPanelInfo.panelEl);
|
|
150
|
+
const pos = this.getPosition(nextPanelInfo.panelEl);
|
|
151
|
+
this.allPanelsStartSizes.set(nextIndex, size);
|
|
152
|
+
this.allPanelsStartPositions.set(nextIndex, pos);
|
|
153
|
+
this.virtualNodeManager.createVirtualNode(nextPanelInfo.panelEl, this.virtualConfig);
|
|
154
|
+
nextIndex++;
|
|
155
|
+
nextPanelInfo = this.getPanelInfo(nextIndex);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
// 非虚拟化模式:直接操作真实节点
|
|
160
|
+
// 禁用flex
|
|
161
|
+
this.prePanelEl.style.flex = 'none';
|
|
162
|
+
this.prePanelEl.style[sizeProperty] = `${this.prePanelStartSize}px`;
|
|
163
|
+
this.nextPanelEl.style.flex = 'none';
|
|
164
|
+
this.nextPanelEl.style[sizeProperty] = `${this.nextPanelStartSize}px`;
|
|
165
|
+
// 记录前面面板的初始尺寸(用于向前拖拽时的级联调整)
|
|
166
|
+
let prevIndex = this.prePanelIndex - 1;
|
|
167
|
+
while (prevIndex >= 0) {
|
|
168
|
+
const panelInfo = this.getPanelInfo(prevIndex);
|
|
169
|
+
if (!panelInfo)
|
|
170
|
+
break;
|
|
171
|
+
const size = this.getSize(panelInfo.panelEl);
|
|
172
|
+
this.allPanelsStartSizes.set(prevIndex, size);
|
|
173
|
+
panelInfo.panelEl.style.flex = 'none';
|
|
174
|
+
panelInfo.panelEl.style[sizeProperty] = `${size}px`;
|
|
175
|
+
prevIndex--;
|
|
176
|
+
}
|
|
177
|
+
// 记录后续面板的初始尺寸(用于向后拖拽时的级联调整)
|
|
178
|
+
let nextIndex = this.nextPanelIndex + 1;
|
|
179
|
+
let nextPanelInfo = this.getPanelInfo(nextIndex);
|
|
180
|
+
while (nextPanelInfo) {
|
|
181
|
+
const size = this.getSize(nextPanelInfo.panelEl);
|
|
182
|
+
this.allPanelsStartSizes.set(nextIndex, size);
|
|
183
|
+
nextPanelInfo.panelEl.style.flex = 'none';
|
|
184
|
+
nextPanelInfo.panelEl.style[sizeProperty] = `${size}px`;
|
|
185
|
+
nextIndex++;
|
|
186
|
+
nextPanelInfo = this.getPanelInfo(nextIndex);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
onResize(delta) {
|
|
191
|
+
if (!this.isResizing)
|
|
192
|
+
return;
|
|
193
|
+
if (delta > 0) {
|
|
194
|
+
// 向后拖拽(水平布局向右,垂直布局向下):扩大前一个面板,缩小后一个面板
|
|
195
|
+
this.adjustPanelsNext(delta);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
// 向前拖拽(水平布局向左,垂直布局向上):缩小前一个面板,扩大后一个面板
|
|
199
|
+
// 将负数转为正数处理
|
|
200
|
+
this.adjustPanelsPre(-delta);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
adjustPanelsNext(delta) {
|
|
204
|
+
let remainingDelta = delta;
|
|
205
|
+
const sizeProperty = this.direction === 'horizontal' ? 'width' : 'height';
|
|
206
|
+
// 尝试从后一个面板获取空间
|
|
207
|
+
const nextPanelInfo = this.getPanelInfo(this.nextPanelIndex);
|
|
208
|
+
if (nextPanelInfo) {
|
|
209
|
+
const nextStartSize = this.allPanelsStartSizes.get(this.nextPanelIndex) || 0;
|
|
210
|
+
const targetNextSize = nextStartSize - remainingDelta;
|
|
211
|
+
const newNextSize = Math.max(nextPanelInfo.minSize, targetNextSize);
|
|
212
|
+
const actualReduction = nextStartSize - newNextSize;
|
|
213
|
+
// 虚拟化模式下更新虚拟节点,否则更新真实节点
|
|
214
|
+
if (this.virtualEnabled && this.virtualNodeManager) {
|
|
215
|
+
this.virtualNodeManager.updateVirtualNode(this.nextPanelEl, newNextSize, this.direction);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
this.nextPanelEl.style[sizeProperty] = `${newNextSize}px`;
|
|
219
|
+
}
|
|
220
|
+
remainingDelta -= actualReduction;
|
|
221
|
+
}
|
|
222
|
+
// 如果后一个面板达到了最小值,继续从后续的面板中获取空间
|
|
223
|
+
if (remainingDelta > 0) {
|
|
224
|
+
let nextIndex = this.nextPanelIndex + 1;
|
|
225
|
+
while (remainingDelta > 0) {
|
|
226
|
+
const nextPanelInfo = this.getPanelInfo(nextIndex);
|
|
227
|
+
if (!nextPanelInfo)
|
|
228
|
+
break;
|
|
229
|
+
const nextStartSize = this.allPanelsStartSizes.get(nextIndex) || 0;
|
|
230
|
+
const targetNextSize = nextStartSize - remainingDelta;
|
|
231
|
+
const newNextSize = Math.max(nextPanelInfo.minSize, targetNextSize);
|
|
232
|
+
const actualReduction = nextStartSize - newNextSize;
|
|
233
|
+
// 虚拟化模式下更新虚拟节点,否则更新真实节点
|
|
234
|
+
if (this.virtualEnabled && this.virtualNodeManager) {
|
|
235
|
+
this.virtualNodeManager.updateVirtualNode(nextPanelInfo.panelEl, newNextSize, this.direction);
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
nextPanelInfo.panelEl.style[sizeProperty] = `${newNextSize}px`;
|
|
239
|
+
}
|
|
240
|
+
remainingDelta -= actualReduction;
|
|
241
|
+
if (newNextSize <= nextPanelInfo.minSize && remainingDelta > 0) {
|
|
242
|
+
nextIndex++;
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// 扩大前一个面板
|
|
250
|
+
const prePanelInfo = this.getPanelInfo(this.prePanelIndex);
|
|
251
|
+
if (prePanelInfo) {
|
|
252
|
+
const preStartSize = this.allPanelsStartSizes.get(this.prePanelIndex) || 0;
|
|
253
|
+
const actualGained = delta - remainingDelta; // 实际获得的尺寸
|
|
254
|
+
const newPreSize = preStartSize + actualGained;
|
|
255
|
+
// 虚拟化模式下更新虚拟节点,否则更新真实节点
|
|
256
|
+
if (this.virtualEnabled && this.virtualNodeManager) {
|
|
257
|
+
this.virtualNodeManager.updateVirtualNode(this.prePanelEl, newPreSize, this.direction);
|
|
258
|
+
// 重新计算所有面板的位置(基于尺寸变化)
|
|
259
|
+
this.recalculateAllPanelsPositions();
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
this.prePanelEl.style[sizeProperty] = `${newPreSize}px`;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
adjustPanelsPre(delta) {
|
|
267
|
+
// 向前拖拽(水平布局向左,垂直布局向上):缩小前一个面板,扩大后一个面板
|
|
268
|
+
// delta 此时是正数(表示向前拖拽的距离)
|
|
269
|
+
let remainingDelta = delta;
|
|
270
|
+
let totalReduced = 0; // 记录从前一个面板实际减少的尺寸总和
|
|
271
|
+
const sizeProperty = this.direction === 'horizontal' ? 'width' : 'height';
|
|
272
|
+
// 先尝试缩小前一个面板
|
|
273
|
+
const prePanelInfo = this.getPanelInfo(this.prePanelIndex);
|
|
274
|
+
if (prePanelInfo) {
|
|
275
|
+
const preStartSize = this.allPanelsStartSizes.get(this.prePanelIndex) || 0;
|
|
276
|
+
const targetPreSize = preStartSize - remainingDelta;
|
|
277
|
+
const newPreSize = Math.max(prePanelInfo.minSize, targetPreSize);
|
|
278
|
+
const actualReduction = preStartSize - newPreSize;
|
|
279
|
+
// 虚拟化模式下更新虚拟节点,否则更新真实节点
|
|
280
|
+
if (this.virtualEnabled && this.virtualNodeManager) {
|
|
281
|
+
this.virtualNodeManager.updateVirtualNode(this.prePanelEl, newPreSize, this.direction);
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
this.prePanelEl.style[sizeProperty] = `${newPreSize}px`;
|
|
285
|
+
}
|
|
286
|
+
totalReduced += actualReduction;
|
|
287
|
+
remainingDelta -= actualReduction;
|
|
288
|
+
}
|
|
289
|
+
// 如果前一个面板达到最小值,继续缩小更前面的面板(prevPanel)
|
|
290
|
+
// 这样可以实现"依次后延"的效果
|
|
291
|
+
if (remainingDelta > 0) {
|
|
292
|
+
let prevIndex = this.prePanelIndex - 1;
|
|
293
|
+
while (remainingDelta > 0 && prevIndex >= 0) {
|
|
294
|
+
const prevPanelInfo = this.getPanelInfo(prevIndex);
|
|
295
|
+
if (!prevPanelInfo)
|
|
296
|
+
break;
|
|
297
|
+
const prevStartSize = this.allPanelsStartSizes.get(prevIndex);
|
|
298
|
+
if (prevStartSize === undefined)
|
|
299
|
+
break;
|
|
300
|
+
const targetPrevSize = prevStartSize - remainingDelta;
|
|
301
|
+
const newPrevSize = Math.max(prevPanelInfo.minSize, targetPrevSize);
|
|
302
|
+
const actualReduction = prevStartSize - newPrevSize;
|
|
303
|
+
// 虚拟化模式下更新虚拟节点,否则更新真实节点
|
|
304
|
+
if (this.virtualEnabled && this.virtualNodeManager) {
|
|
305
|
+
this.virtualNodeManager.updateVirtualNode(prevPanelInfo.panelEl, newPrevSize, this.direction);
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
prevPanelInfo.panelEl.style[sizeProperty] = `${newPrevSize}px`;
|
|
309
|
+
}
|
|
310
|
+
totalReduced += actualReduction; // 将这部分空间也加到后一个面板
|
|
311
|
+
remainingDelta -= actualReduction;
|
|
312
|
+
if (newPrevSize <= prevPanelInfo.minSize && remainingDelta > 0) {
|
|
313
|
+
prevIndex--; // 继续向前查找
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
break;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
// 扩大后一个面板(使用实际减少的尺寸)
|
|
321
|
+
const nextPanelInfo = this.getPanelInfo(this.nextPanelIndex);
|
|
322
|
+
if (nextPanelInfo) {
|
|
323
|
+
const nextStartSize = this.allPanelsStartSizes.get(this.nextPanelIndex) || 0;
|
|
324
|
+
const newNextSize = nextStartSize + totalReduced;
|
|
325
|
+
// 虚拟化模式下更新虚拟节点,否则更新真实节点
|
|
326
|
+
if (this.virtualEnabled && this.virtualNodeManager) {
|
|
327
|
+
this.virtualNodeManager.updateVirtualNode(this.nextPanelEl, newNextSize, this.direction);
|
|
328
|
+
// 重新计算所有面板的位置(基于尺寸变化)
|
|
329
|
+
this.recalculateAllPanelsPositions();
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
this.nextPanelEl.style[sizeProperty] = `${newNextSize}px`;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* 重新计算所有面板的位置(虚拟化模式使用)
|
|
338
|
+
* 基于每个面板的初始位置和前面所有面板的尺寸变化
|
|
339
|
+
*/
|
|
340
|
+
recalculateAllPanelsPositions() {
|
|
341
|
+
if (!this.virtualEnabled || !this.virtualNodeManager)
|
|
342
|
+
return;
|
|
343
|
+
// 从第一个面板开始,顺序计算每个面板的新位置
|
|
344
|
+
// 使用累积方式:从第一个面板的初始位置开始,依次加上每个面板的当前尺寸和拖拽器尺寸
|
|
345
|
+
const firstPanelStartPos = this.allPanelsStartPositions.get(0) || 0;
|
|
346
|
+
let currentPosition = firstPanelStartPos;
|
|
347
|
+
let index = 0;
|
|
348
|
+
let panelInfo = this.getPanelInfo(index);
|
|
349
|
+
while (panelInfo) {
|
|
350
|
+
const startPos = this.allPanelsStartPositions.get(index);
|
|
351
|
+
if (startPos !== undefined) {
|
|
352
|
+
// 获取虚拟节点
|
|
353
|
+
const virtualEl = this.virtualNodeManager.getVirtualNode(panelInfo.panelEl);
|
|
354
|
+
if (virtualEl) {
|
|
355
|
+
// 如果是第一个面板,使用初始位置
|
|
356
|
+
if (index === 0) {
|
|
357
|
+
currentPosition = startPos;
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
// 对于后续面板,使用累积方式计算位置
|
|
361
|
+
// 从第一个面板开始,累积所有前面面板的尺寸和拖拽器尺寸
|
|
362
|
+
currentPosition = firstPanelStartPos;
|
|
363
|
+
for (let i = 0; i < index; i++) {
|
|
364
|
+
const prevInfo = this.getPanelInfo(i);
|
|
365
|
+
if (prevInfo) {
|
|
366
|
+
const prevVEl = this.virtualNodeManager.getVirtualNode(prevInfo.panelEl);
|
|
367
|
+
if (prevVEl) {
|
|
368
|
+
const prevSize = this.direction === 'horizontal'
|
|
369
|
+
? prevVEl.offsetWidth
|
|
370
|
+
: prevVEl.offsetHeight;
|
|
371
|
+
currentPosition += prevSize + this.handleSize;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
// 更新虚拟节点的位置
|
|
377
|
+
this.virtualNodeManager.updateVirtualNodePosition(panelInfo.panelEl, currentPosition, this.direction);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
index++;
|
|
381
|
+
panelInfo = this.getPanelInfo(index);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
getSize(el) {
|
|
385
|
+
return this.direction === 'horizontal' ? el.offsetWidth : el.offsetHeight;
|
|
386
|
+
}
|
|
387
|
+
getPosition(el) {
|
|
388
|
+
// 获取元素相对于父容器的位置
|
|
389
|
+
if (this.direction === 'horizontal') {
|
|
390
|
+
return el.offsetLeft;
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
return el.offsetTop;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
endResize() {
|
|
397
|
+
this.isResizing = false;
|
|
398
|
+
if (this.virtualEnabled && this.virtualNodeManager) {
|
|
399
|
+
// 虚拟化模式:将最终尺寸应用到真实节点
|
|
400
|
+
const sizeProperty = this.direction === 'horizontal' ? 'width' : 'height';
|
|
401
|
+
// 获取所有虚拟节点的最终尺寸并应用到真实节点
|
|
402
|
+
this.allPanelsStartSizes.forEach((_, index) => {
|
|
403
|
+
const panelInfo = this.getPanelInfo(index);
|
|
404
|
+
if (!panelInfo)
|
|
405
|
+
return;
|
|
406
|
+
const virtualEl = this.virtualNodeManager.getVirtualNode(panelInfo.panelEl);
|
|
407
|
+
if (virtualEl) {
|
|
408
|
+
const finalSize = this.direction === 'horizontal'
|
|
409
|
+
? virtualEl.offsetWidth
|
|
410
|
+
: virtualEl.offsetHeight;
|
|
411
|
+
// 应用最终尺寸到真实节点
|
|
412
|
+
panelInfo.panelEl.style.flex = 'none';
|
|
413
|
+
panelInfo.panelEl.style[sizeProperty] = `${finalSize}px`;
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
// 清理所有虚拟节点
|
|
417
|
+
this.virtualNodeManager.removeAllVirtualNodes();
|
|
418
|
+
}
|
|
419
|
+
this.allPanelsStartSizes.clear();
|
|
420
|
+
}
|
|
421
|
+
destroy() {
|
|
422
|
+
this.endResize();
|
|
423
|
+
// 清理虚拟节点管理器
|
|
424
|
+
if (this.virtualNodeManager) {
|
|
425
|
+
this.virtualNodeManager.destroy();
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
exports.default = ResizeAbleCore;
|
|
431
|
+
//# sourceMappingURL=resizeAble.js.map
|