图片懒加载之IntersectionObserver对象,本文只介绍使用IntersectionObserver进行图片懒加载的方式
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
.title {
height: 100px;
background-color: rgba(0, 0, 0, 0.473);
margin-bottom: 10px;
}
.pic {
text-align: center;
margin: 0 auto;
}
.pic img {
width: 500px;
height:300px
}
</style>
<body>
<div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
</div>
<div class="pic">
<img class="lazyImg" src="./images/1.png" data-src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic_source%2Fe5%2F42%2Ff0%2Fe542f0b7969a01e037138624b082174d.jpg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1662972901&t=fe96bdda518b65041a48c1698d396808" alt="">
<img class="lazyImg" src="./images/1.png" data-src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic_source%2Fe5%2F42%2Ff0%2Fe542f0b7969a01e037138624b082174d.jpg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1662972901&t=fe96bdda518b65041a48c1698d396808" alt="">
<img class="lazyImg" src="./images/1.png" data-src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic_source%2Fe5%2F42%2Ff0%2Fe542f0b7969a01e037138624b082174d.jpg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1662972901&t=fe96bdda518b65041a48c1698d396808" alt="">
<img class="lazyImg" src="./images/1.png" data-src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic_source%2Fe5%2F42%2Ff0%2Fe542f0b7969a01e037138624b082174d.jpg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1662972901&t=fe96bdda518b65041a48c1698d396808" alt="">
<img class="lazyImg" src="./images/1.png" data-src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic_source%2Fe5%2F42%2Ff0%2Fe542f0b7969a01e037138624b082174d.jpg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1662972901&t=fe96bdda518b65041a48c1698d396808" alt="">
<img class="lazyImg" src="./images/1.png" data-src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic_source%2Fe5%2F42%2Ff0%2Fe542f0b7969a01e037138624b082174d.jpg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1662972901&t=fe96bdda518b65041a48c1698d396808" alt="">
<img class="lazyImg" src="./images/1.png" data-src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic_source%2Fe5%2F42%2Ff0%2Fe542f0b7969a01e037138624b082174d.jpg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1662972901&t=fe96bdda518b65041a48c1698d396808" alt="">
<img class="lazyImg" src="./images/1.png" data-src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic_source%2Fe5%2F42%2Ff0%2Fe542f0b7969a01e037138624b082174d.jpg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1662972901&t=fe96bdda518b65041a48c1698d396808" alt="">
</div>
<div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
</div>
</body>
<script>
(function() {
function callback(entries) {
//entries 是一个数组,进入视野的元素的数组
entries.forEach(k => {
if (k.isIntersecting) {
//遍历绑定去除我们便签上的属性 放到src属性里面
let real_src = k.target.getAttribute('data-src')
k.target.setAttribute('src',real_src)
//最后把这个眼踩掉就行了
imgObserve.unobserve(k.target)
}
})
}
let imgs = document.getElementsByClassName('lazyImg')
// 获取浏览器对象
//IntersectionObserver
//callback是当被监听元素的可见性变化时,触发的回调函数
//options是一个配置参数,可选,有默认的属性值
let imgObserve = new IntersectionObserver(callback)
for (let i = 0; i < imgs.length; i++) {
//调用observe方法给元素加上监听,就是插个眼先,一但这个元素进入浏览器的视野就会回调 callback函数
imgObserve.observe(imgs[i])
}
})();
</script>
</html>
好了,这就是基本的图片懒加载了