视口可见性浏览器API new IntersectionObserver() 实现图片懒加载

关于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>

素材

在这里插入图片描述
在这里插入图片描述

发布了96 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_35958891/article/details/103610562