图片懒加载的三种实现方式
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)
}
})
})
}