various-ui
Version:
This is a test version of the Vue 3 component library
1 lines • 11.8 kB
Source Map (JSON)
{"version":3,"file":"utils.mjs","sources":["../../../../../../packages/utils/src/dispose/boundary/utils.ts"],"sourcesContent":["import type { UiTypes } from \"@various/constants\";\r\nimport type { DisposeNodeRectSize, DisposeSubRectOption, DisposeMainRectOption } from \"./types\";\r\n\r\nimport setting from \"./setting\";\r\n\r\n//* 获取滚动条尺寸\r\nexport const disposeScrollSize = () => {\r\n //* 创建一个隐藏的div,并设置其内容足够大以产生滚动条\r\n const outer = document.createElement(\"div\");\r\n const inner = document.createElement(\"div\");\r\n\r\n //* 设置外部div的样式\r\n outer.style.visibility = \"hidden\";\r\n outer.style.overflow = \"scroll\";\r\n outer.style.position = \"absolute\";\r\n outer.style.top = \"-9999px\";\r\n document.body.appendChild(outer);\r\n\r\n //* 设置内部div的样式,使其足够大以产生滚动条\r\n inner.style.width = \"100%\";\r\n outer.appendChild(inner);\r\n\r\n //* 获取滚动条的宽度(外部div的宽度减去内部div的宽度)\r\n const size = outer.offsetWidth - inner.offsetWidth;\r\n //* 处理页面可视区域宽度\r\n const result = { width: 0, height: 0 };\r\n if (document.body.scrollHeight > innerHeight) result.width = size;\r\n if (document.body.scrollWidth > innerWidth) {\r\n result.height = size;\r\n }\r\n\r\n //* 清理\r\n document.body.removeChild(outer);\r\n //* 返回数据\r\n return result;\r\n};\r\n\r\n//* 主轴的边界处理函数\r\nexport const disposeMainAxis = (size: DisposeNodeRectSize, option: DisposeMainRectOption) => {\r\n if (option.strategy == \"Disable\") return { offset: option.offset, direction: option.direction };\r\n if (option.orientation > 0) {\r\n const offset = Math.floor(option.offset - size.container - size.view - size.space * 2);\r\n if (option.offset + size.view >= option.max && offset > option.min) {\r\n return { offset: offset, direction: setting.DIRECTION[option.direction] as UiTypes.direction };\r\n }\r\n } else {\r\n if (option.offset <= option.min && option.offset + size.container + size.view * 2 + size.space * 2 < option.max) {\r\n return {\r\n offset: Math.floor(option.offset + size.container + size.view + size.space * 2),\r\n direction: setting.DIRECTION[option.direction] as UiTypes.direction,\r\n };\r\n }\r\n }\r\n\r\n return { offset: option.offset, direction: option.direction };\r\n};\r\n\r\n//* 副轴的边界处理函数\r\nexport const disposeSubAxis = (size: DisposeNodeRectSize, option: DisposeSubRectOption) => {\r\n //* 数据初始化\r\n const result = { offset: option.offset + size.space, align: option.align };\r\n const difference = size.view - size.container;\r\n\r\n //* 减小最小最大位置的判定范围\r\n option.max -= 40;\r\n option.min += 40;\r\n\r\n //* 方向处理\r\n switch (option.align) {\r\n case \"center\": {\r\n //* 计算初始位置\r\n const offset = Math.floor(result.offset - difference / 2);\r\n //* 检测右侧超出边界\r\n if (option.strategy != \"Disable\" && offset + size.view >= option.max) {\r\n //* 检测右对齐时, 左侧是否未超出边界\r\n if (option.strategy == \"Perfect\") {\r\n result.offset = option.max - size.view;\r\n if (result.offset < option.min) result.offset = option.min;\r\n return result;\r\n } else if (result.offset - difference - size.space * 2 > option.min) {\r\n result.offset = result.offset - difference - size.space * 2;\r\n result.align = \"end\";\r\n return result;\r\n }\r\n }\r\n\r\n //* 检测左侧超出边界\r\n if (option.strategy != \"Disable\" && offset <= option.min) {\r\n if (option.strategy == \"Perfect\") {\r\n result.offset = option.min;\r\n if (result.offset + size.view > option.max) result.offset = option.max - size.view;\r\n return result;\r\n } else if (result.offset + size.view < option.max) {\r\n result.align = \"start\";\r\n return result;\r\n }\r\n }\r\n\r\n result.offset = offset;\r\n return result;\r\n }\r\n\r\n case \"start\": {\r\n //* 检测是否左对齐时右侧超出边界并且右对齐时左侧是否在边界内\r\n if (option.strategy != \"Disable\" && result.offset + size.view >= option.max) {\r\n if (option.strategy == \"Perfect\") {\r\n result.offset = option.max - size.view;\r\n if (result.offset < option.min) {\r\n result.offset = option.min;\r\n }\r\n } else if (result.offset - difference - size.space * 2 > option.min) {\r\n result.offset = result.offset - difference - size.space * 2;\r\n result.align = \"end\";\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n case \"end\": {\r\n //* 计算初始位置\r\n const offset = result.offset - difference - size.space * 2;\r\n //* 检测是否右对齐时左侧超出边界并且左对齐时右侧是否在边界内\r\n if (option.strategy != \"Disable\" && offset <= option.min) {\r\n if (option.strategy == \"Perfect\") {\r\n result.offset = option.min;\r\n if (result.offset + size.view > option.max) result.offset = option.max - size.view;\r\n return result;\r\n } else if (result.offset + size.view < option.max) {\r\n result.offset = result.offset;\r\n result.align = \"start\";\r\n return result;\r\n }\r\n }\r\n\r\n result.offset = offset;\r\n return result;\r\n }\r\n }\r\n};\r\n\r\n//* 窗口三角形属性设置\r\nexport const setTriangleAttr = (node: HTMLElement, direction: UiTypes.direction, align: UiTypes.align) => {\r\n //* 获取三角形属性\r\n const attrs: { [name: string]: string } = setting.TRIGGER[`${direction}_${align}`];\r\n //* 遍历设置三角形属性\r\n for (const i in attrs) {\r\n node.style[i as any] = attrs[i];\r\n }\r\n};\r\n"],"names":[],"mappings":"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"}