关于new IntersectionObserver()的详细文档可以参考 阮一峰IntersectionObserver API 使用教程
效果
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
img{
display: block;
width: 600px;
height: auto;
border: 1px solid red;
}
</style>
</head>
<body>
<img src="./img/loading.gif" data-src="./img/2.gif" alt="">
<img src="./img/loading.gif" data-src="./img/2.gif" alt="">
<img src="./img/loading.gif" data-src="./img/2.gif" alt="">
<img src="./img/loading.gif" data-src="./img/2.gif" alt="">
<img src="./img/loading.gif" data-src="./img/2.gif" alt="">
<img src="./img/loading.gif" data-src="./img/2.gif" alt="">
<img src="./img/loading.gif" data-src="./img/2.gif" alt="">
<img src="./img/loading.gif" data-src="./img/2.gif" alt="">
<img src="./img/loading.gif" data-src="./img/2.gif" alt="">
<img src="./img/loading.gif" data-src="./img/2.gif" alt="">
<img src="./img/loading.gif" data-src="./img/2.gif" alt="">
<script>
var io = new IntersectionObserver(e=>{
e.forEach(item=>{
let dom = item.target;
if(item.isIntersecting){
setTimeout(() => {
dom.src = dom.dataset.src;
}, 1000)
}else{
// 这里是为了更好的显示效果加了个反显示
setTimeout(() => {
dom.src = './img/loading.gif';
}, 1000)
}
})
});
document.querySelectorAll('img').forEach(item=>{
// 开始观察
io.observe(item);
})
// 停止观察
// io.unobserve(element);
// 关闭观察器
// io.disconnect();
</script>
</body>
</html>
素材