xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 3.06 kB
Source Map (JSON)
{"version":3,"file":"getPosition.mjs","sources":["../../../../src/_common/js/utils/getPosition.ts"],"sourcesContent":["type Placement = 'top' | 'bottom' | 'left' | 'right' | 'mouse';\n\nconst getPosition = (\n targetEle: HTMLElement,\n contentEle: HTMLElement,\n placement: Partial<Placement>,\n clientX?: Number,\n): { left: number; top: number } => {\n const targetRect = targetEle.getBoundingClientRect() as DOMRect;\n const contentRect = contentEle.getBoundingClientRect() as DOMRect;\n\n const position = {\n top: document.documentElement.scrollTop,\n left: document.documentElement.scrollLeft,\n };\n\n if (targetRect && contentRect) {\n const dWidth = targetRect.width - contentRect.width;\n // eslint-disable-next-line default-case\n switch (placement) {\n case 'top':\n position.left += targetRect.left + dWidth / 2;\n position.top += targetRect.top - contentRect.height - 16;\n break;\n case 'bottom':\n position.left += targetRect.left + dWidth / 2;\n position.top += targetRect.top + targetRect.height;\n break;\n case 'mouse':\n position.left += Number(clientX);\n position.top += targetRect.top + targetRect.height + 8;\n break;\n // 后续有需要可以再扩展\n }\n\n if (placement === 'mouse') {\n const edges = {\n top: document.documentElement.scrollTop,\n left: document.documentElement.scrollLeft,\n right: document.documentElement.scrollLeft + document.documentElement.clientWidth,\n bottom: document.documentElement.scrollTop + document.documentElement.clientHeight,\n };\n\n // 底部溢出时,定位到元素上方\n if (position.top > edges.bottom - contentRect.height) {\n position.top = document.documentElement.scrollTop + targetRect.top - contentRect.height - 8;\n }\n\n // 右侧溢出时,确保元素能完全展示\n if (position.left > edges.right - contentRect.width) {\n position.left = edges.right - contentRect.width;\n }\n }\n }\n\n return position;\n};\n\nexport default getPosition;\n"],"names":["top","left","position"],"mappings":";;;;;;AAEA,sCAAA,IAAA,WAAA,GAAA,SAAA,WAAA,CAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA;AAMQ,EAAA,IAAA,UAAA,GAAA,SAAA,CAAA,qBAAA,EAAA,CAAA;AACA,EAAA,IAAA,WAAA,GAAA,UAAA,CAAA,qBAAA,EAAA,CAAA;AAEN,EAAA,IAAA,QAAA,GAAA;AACEA,IAAAA,GAAAA,EAAAA,QAAAA,CAAAA,eAAAA,CAAAA,SAAAA;AACAC,IAAAA,IAAAA,EAAAA,QAAAA,CAAAA,eAAAA,CAAAA,UAAAA;;;;AAMQ,IAAA,QAAA,SAAA;AACD,MAAA,KAAA,KAAA;;;AAGH,QAAA,MAAA;AACG,MAAA,KAAA,QAAA;;;AAGH,QAAA,MAAA;AACG,MAAA,KAAA,OAAA;AACMC,QAAAA,QAAAA,CAAAA,IAAAA,IAAAA,MAAAA,CAAAA,OAAAA,CAAAA,CAAAA;;AAET,QAAA,MAAA;AAAA,KAAA;;AAKF,MAAA,IAAA,KAAA,GAAA;AACEF,QAAAA,GAAAA,EAAAA,QAAAA,CAAAA,eAAAA,CAAAA,SAAAA;AACAC,QAAAA,IAAAA,EAAAA,QAAAA,CAAAA,eAAAA,CAAAA,UAAAA;;;;;AAOAC,QAAAA,QAAAA,CAAAA,GAAAA,GAAAA,QAAAA,CAAAA,eAAAA,CAAAA,SAAAA,GAAAA,UAAAA,CAAAA,GAAAA,GAAAA,WAAAA,CAAAA,MAAAA,GAAAA,CAAAA,CAAAA;AACF,OAAA;;;AAKA,OAAA;AACF,KAAA;AACF,GAAA;AAEO,EAAA,OAAA,QAAA,CAAA;AACT;;;;"}