{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-scroll/index.ts"],"sourcesContent":["/**\r\n * @description: 用于监听滚动行为/window的resize监听/滚动区域内的dom动态增删dom来添加阴影\r\n * @return {HTMLElement} elementRef 要滚动监听的dom\r\n * @return {scrollPosition} IScrollPosition 监听的位置\r\n */\r\nimport { onUnmounted, ref, watch } from 'vue'\r\n\r\ntype IScrollPosition = 'top' | 'scrolling' | 'bottom' // 滚动到最顶部、滚动中、滚动到最底部\r\n\r\nexport function useScroll() {\r\n  const scrollRef = ref<HTMLElement>() // 监听滚动的dom\r\n  const scrollPosition = ref<IScrollPosition>() // 滚动到的位置\r\n  const isHasScrollBar = ref(false) // 是否有滚动条\r\n  let observer: ResizeObserver // 监听dom内容发生变化\r\n\r\n  // 滚动事件\r\n  const handleScroll = (event: Event) => {\r\n    const target = event.target as HTMLElement\r\n    getSrcollPosition(target)\r\n  }\r\n  // 判断滚动位置\r\n  const getSrcollPosition = (target: HTMLElement) => {\r\n    // 判断是否有滚动体条\r\n    if (target.scrollHeight > target.offsetHeight) {\r\n      isHasScrollBar.value = true\r\n    } else {\r\n      isHasScrollBar.value = false\r\n    }\r\n    if (!!target.scrollTop) {\r\n      // 有0.5px的误差 故-1\r\n      if (target.scrollTop + target.offsetHeight >= target.scrollHeight - 1) {\r\n        // 在最底部\r\n        scrollPosition.value = 'bottom'\r\n      } else {\r\n        // 滚动中\r\n        scrollPosition.value = 'scrolling'\r\n      }\r\n    } else {\r\n      // 在最顶部\r\n      scrollPosition.value = 'top'\r\n    }\r\n  }\r\n\r\n  // 监听滚动容器高度的变化\r\n  watch(\r\n    scrollRef,\r\n    () => {\r\n      if (scrollRef.value) {\r\n        scrollRef.value!.addEventListener('scroll', handleScroll)\r\n      }\r\n    },\r\n    {\r\n      immediate: true,\r\n      deep: true\r\n    }\r\n  )\r\n\r\n  watch(\r\n    scrollRef,\r\n    () => {\r\n      if (scrollRef.value) {\r\n        if (!observer) {\r\n          observer = new ResizeObserver(() => {\r\n            if (scrollRef.value) {\r\n              // 检查容器的高度变化\r\n              if (\r\n                scrollRef.value!.scrollHeight > scrollRef.value!.offsetHeight\r\n              ) {\r\n                isHasScrollBar.value = true\r\n              } else {\r\n                isHasScrollBar.value = false\r\n              }\r\n            }\r\n          })\r\n          observer.observe(scrollRef.value)\r\n        }\r\n      }\r\n    },\r\n    {\r\n      immediate: true,\r\n      deep: true\r\n    }\r\n  )\r\n\r\n  // 组件卸载停止监听\r\n  onUnmounted(() => {\r\n    if (observer) {\r\n      observer.disconnect()\r\n    }\r\n  })\r\n  // 组件卸载停止监听\r\n  onUnmounted(() => {\r\n    if (scrollRef.value) {\r\n      scrollRef.value!.removeEventListener('scroll', handleScroll)\r\n    }\r\n  })\r\n\r\n  return { scrollRef, isHasScrollBar, scrollPosition }\r\n}\r\n"],"names":[],"mappings":";;;AASO,SAAS,SAAA,GAAY;AAC1B,EAAA,MAAM,YAAY,GAAA,EAAiB;AACnC,EAAA,MAAM,iBAAiB,GAAA,EAAqB;AAC5C,EAAA,MAAM,cAAA,GAAiB,IAAI,KAAK,CAAA;AAChC,EAAA,IAAI,QAAA;AAGJ,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAiB;AACrC,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,IAAA,iBAAA,CAAkB,MAAM,CAAA;AAAA,EAC1B,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,MAAA,KAAwB;AAEjD,IAAA,IAAI,MAAA,CAAO,YAAA,GAAe,MAAA,CAAO,YAAA,EAAc;AAC7C,MAAA,cAAA,CAAe,KAAA,GAAQ,IAAA;AAAA,IACzB,CAAA,MAAO;AACL,MAAA,cAAA,CAAe,KAAA,GAAQ,KAAA;AAAA,IACzB;AACA,IAAA,IAAI,CAAC,CAAC,MAAA,CAAO,SAAA,EAAW;AAEtB,MAAA,IAAI,OAAO,SAAA,GAAY,MAAA,CAAO,YAAA,IAAgB,MAAA,CAAO,eAAe,CAAA,EAAG;AAErE,QAAA,cAAA,CAAe,KAAA,GAAQ,QAAA;AAAA,MACzB,CAAA,MAAO;AAEL,QAAA,cAAA,CAAe,KAAA,GAAQ,WAAA;AAAA,MACzB;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,cAAA,CAAe,KAAA,GAAQ,KAAA;AAAA,IACzB;AAAA,EACF,CAAA;AAGA,EAAA,KAAA;AAAA,IACE,SAAA;AAAA,IACA,MAAM;AACJ,MAAA,IAAI,UAAU,KAAA,EAAO;AACnB,QAAA,SAAA,CAAU,KAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,YAAY,CAAA;AAAA,MAC1D;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM;AAAA;AACR,GACF;AAEA,EAAA,KAAA;AAAA,IACE,SAAA;AAAA,IACA,MAAM;AACJ,MAAA,IAAI,UAAU,KAAA,EAAO;AACnB,QAAA,IAAI,CAAC,QAAA,EAAU;AACb,UAAA,QAAA,GAAW,IAAI,eAAe,MAAM;AAClC,YAAA,IAAI,UAAU,KAAA,EAAO;AAEnB,cAAA,IACE,SAAA,CAAU,KAAA,CAAO,YAAA,GAAe,SAAA,CAAU,MAAO,YAAA,EACjD;AACA,gBAAA,cAAA,CAAe,KAAA,GAAQ,IAAA;AAAA,cACzB,CAAA,MAAO;AACL,gBAAA,cAAA,CAAe,KAAA,GAAQ,KAAA;AAAA,cACzB;AAAA,YACF;AAAA,UACF,CAAC,CAAA;AACD,UAAA,QAAA,CAAS,OAAA,CAAQ,UAAU,KAAK,CAAA;AAAA,QAClC;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM;AAAA;AACR,GACF;AAGA,EAAA,WAAA,CAAY,MAAM;AAChB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,UAAA,EAAW;AAAA,IACtB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,WAAA,CAAY,MAAM;AAChB,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,SAAA,CAAU,KAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,YAAY,CAAA;AAAA,IAC7D;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,EAAE,SAAA,EAAW,cAAA,EAAgB,cAAA,EAAe;AACrD;;;;"}