图片懒加载

210 阅读1分钟

图片懒加载的三种实现方式

1、img标签添加loading="lazy"

2、监听图片是否在视口,凑字数数数数数数数数数数数数数数数数数数数数数

// 方法一
function lazyLoadingImg() {
  const intersectionObserver = new IntersectionObserver((entries) => {
    if (entries[0].intersectionRatio <= 0) return

    // 图片src与data-src不同则加载
    if (entries[0].isIntersecting) {
      console.log('Loaded img')
      const target = entries[0].target
      target.setAttribute('src', target.getAttribute('data-src'))
    }
  })
  // 开始监听
  intersectionObserver.observe(document.querySelector('img'))
}
// 方法二
    // 收集所有图片,监听滚动
    function lazyLoadingImg1() {
      const imgs = [...document.querySelectorAll('.waiting-img')]
      document.addEventListener('scroll', function scrollCallback() {
        // 当imgs为空时,取消监听
        if (imgs.length === 0) {
          document.removeEventListener('scroll', scrollCallback)
        }
        const clientHeight = window.innerHeight
        imgs.forEach((item, index) => {
          const imgRect = item.getBoundingClientRect()
          if (clientHeight > imgRect.top) {
            item.setAttribute('src', item.getAttribute('data-src'))
            imgs.splice(index, 1)
          }
        })
      })
    }