UNPKG

tdesign-mobile-vue

Version:
1 lines 4.14 kB
{"version":3,"file":"useElementHeight.mjs","sources":["../../src/hooks/useElementHeight.ts"],"sourcesContent":["import { ref, Ref, nextTick, onMounted, onUnmounted } from 'vue';\n\nexport interface UseElementHeightOptions {\n /** 是否立即计算高度 */\n immediate?: boolean;\n /** 监听窗口大小变化 */\n resizeObserver?: boolean;\n}\n\n/**\n * 用于计算元素高度的 hook\n * @param target 元素 ref\n * @param options 配置选项\n * @returns 返回高度和重新计算的方法\n */\nexport default function useElementHeight(target: Ref<HTMLElement | undefined>, options: UseElementHeightOptions = {}) {\n const { immediate = true, resizeObserver = false } = options;\n const elementHeight = ref(0);\n let resizeObserverInstance: ResizeObserver | null = null;\n\n const calculateHeight = async () => {\n await nextTick();\n const currentElement = target.value;\n if (currentElement) {\n elementHeight.value = currentElement.getBoundingClientRect().height;\n }\n };\n\n const setupResizeObserver = () => {\n if (!resizeObserver) return;\n\n const currentElement = target.value;\n if (currentElement && window.ResizeObserver) {\n resizeObserverInstance = new ResizeObserver(() => {\n calculateHeight();\n });\n resizeObserverInstance.observe(currentElement);\n }\n };\n\n const cleanupResizeObserver = () => {\n if (resizeObserverInstance) {\n resizeObserverInstance.disconnect();\n resizeObserverInstance = null;\n }\n };\n\n onMounted(() => {\n if (immediate) {\n calculateHeight();\n }\n setupResizeObserver();\n });\n\n onUnmounted(() => {\n cleanupResizeObserver();\n });\n\n return {\n height: elementHeight,\n calculateHeight,\n };\n}\n"],"names":["useElementHeight","target","options","arguments","length","undefined","_options$immediate","immediate","_options$resizeObserv","resizeObserver","elementHeight","ref","resizeObserverInstance","calculateHeight","_callee","currentElement","_regeneratorRuntime","wrap","_context","prev","next","nextTick","value","getBoundingClientRect","height","stop","setupResizeObserver","window","ResizeObserver","observe","cleanupResizeObserver","disconnect","onMounted","onUnmounted"],"mappings":";;;;;;;;;;;AAeA,SAAwBA,gBAAiBA,CAAAC,MAAA,EAA6E;AAAA,EAAA,IAAvCC,OAAmC,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAA,EAAI,CAAA;AACpH,EAAA,IAAAG,kBAAA,GAAqDJ,OAAA,CAA7CK,SAAA;AAAAA,IAAAA,SAAA,GAAAD,kBAAA,KAAY,KAAA,CAAA,GAAA,IAAM,GAAAA,kBAAA;IAAAE,qBAAA,GAA2BN,OAAA,CAA3BO,cAAA;AAAAA,IAAAA,cAAA,GAAAD,qBAAA,KAAiB,KAAA,CAAA,GAAA;AACrC,EAAA,IAAAE,aAAA,GAAgBC,IAAI,CAAC,CAAA,CAAA;EAC3B,IAAIC,sBAAgD,GAAA,IAAA,CAAA;AAEpD,EAAA,IAAMC;+DAAkB,SAAAC,OAAA,GAAA;AAAA,MAAA,IAAAC,cAAA,CAAA;AAAA,MAAA,OAAAC,WAAA,CAAAC,IAAA,CAAA,UAAAC,QAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;AAAA,UAAA,KAAA,CAAA;AAAAF,YAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;YAAA,OAChBC,QAAS,EAAA,CAAA;AAAA,UAAA,KAAA,CAAA;YACTN,iBAAiBd,MAAO,CAAAqB,KAAA,CAAA;AAC9B,YAAA,IAAIP,cAAgB,EAAA;cACJL,aAAA,CAAAY,KAAA,GAAQP,cAAe,CAAAQ,qBAAA,EAAwB,CAAAC,MAAA,CAAA;AAC/D,aAAA;AAAA,UAAA,KAAA,CAAA,CAAA;AAAA,UAAA,KAAA,KAAA;YAAA,OAAAN,QAAA,CAAAO,IAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA,EAAAX,OAAA,CAAA,CAAA;KACF,CAAA,CAAA,CAAA;AAAA,IAAA,OAAA,SANMD;;;GAMN,EAAA,CAAA;AAEA,EAAA,IAAMa,sBAAsB,SAAtBA,sBAA4B;IAChC,IAAI,CAACjB,cAAA,EAAgB,OAAA;AAErB,IAAA,IAAMM,iBAAiBd,MAAO,CAAAqB,KAAA,CAAA;AAC1B,IAAA,IAAAP,cAAA,IAAkBY,OAAOC,cAAgB,EAAA;AAClBhB,MAAAA,sBAAA,GAAA,IAAIgB,eAAe,YAAM;AAChCf,QAAAA,eAAA,EAAA,CAAA;AAClB,OAAC,CAAA,CAAA;AACDD,MAAAA,sBAAA,CAAuBiB,QAAQd,cAAc,CAAA,CAAA;AAC/C,KAAA;GACF,CAAA;AAEA,EAAA,IAAMe,wBAAwB,SAAxBA,wBAA8B;AAClC,IAAA,IAAIlB,sBAAwB,EAAA;MAC1BA,sBAAA,CAAuBmB,UAAW,EAAA,CAAA;AACTnB,MAAAA,sBAAA,GAAA,IAAA,CAAA;AAC3B,KAAA;GACF,CAAA;AAEAoB,EAAAA,SAAA,CAAU,YAAM;AACd,IAAA,IAAIzB,SAAW,EAAA;AACGM,MAAAA,eAAA,EAAA,CAAA;AAClB,KAAA;AACoBa,IAAAA,mBAAA,EAAA,CAAA;AACtB,GAAC,CAAA,CAAA;AAEDO,EAAAA,WAAA,CAAY,YAAM;AACMH,IAAAA,qBAAA,EAAA,CAAA;AACxB,GAAC,CAAA,CAAA;EAEM,OAAA;AACLN,IAAAA,MAAQ,EAAAd,aAAA;AACRG,IAAAA,eAAA,EAAAA,eAAAA;GACF,CAAA;AACF;;;;"}