scroll.js 1.1 KB

123456789101112131415161718192021222324252627
  1. /**
  2. * 判断某个元素是否在滚动区域的视口中(和视口重叠)
  3. * element: 目标元素dom
  4. * scrollContainer: 滚动区域(如果是body滚动,则此参数不传)
  5. */
  6. export function isElementInScrollArea(element, scrollContainer) {
  7. const elementRect = element.getBoundingClientRect()
  8. if (scrollContainer) {
  9. const containerRect = scrollContainer.getBoundingClientRect()
  10. // 判断元素的上边界和下边界是否在滚动容器的上边界和下边界之间
  11. const isElementAboveContainer = elementRect.bottom < containerRect.top
  12. const isElementBelowContainer = elementRect.top > containerRect.bottom
  13. // 如果元素在滚动容器的上下边界之间,则认为它在滚动区域内
  14. return !(isElementAboveContainer || isElementBelowContainer)
  15. } else {
  16. const viewportWidth = window.innerWidth || document.documentElement.clientWidth
  17. const viewportHeight = window.innerHeight || document.documentElement.clientHeight
  18. return (
  19. elementRect.top < viewportHeight &&
  20. elementRect.bottom > 0 &&
  21. elementRect.left < viewportWidth &&
  22. elementRect.right > 0
  23. )
  24. }
  25. }