图片懒加载

图片懒加载

首先说一下懒加载的原理,我们知道浏览器在加载图片是通过src的地址进行访问的,如果加载图片数量少了还可以,如果是图片类型的网站,加载多个图片这无不是给浏览器请求增加了负担,所以我们通过用户浏览的情况来加载一定的数量,比如说,用户刚打开网页浏览时,看到的是整个浏览器窗口的大小,我们就先加载一定数量的图片信息,这样就给浏览器请求有了一定的缓解时间,当用户下拉页面时触发再次请求图片信息,这样缓解了浏览器的压力,还给用户一种在请求数据的体验。

原理

1.先写html,我们将src的请求地址给到空,这样刚开始是不会请求数据的,然后给img加上一个data-src属性,用来存放真实图片地址的信息,(data-src这个名字可以换成其他名字,这是自定义的名字)
2.js部分就是先获取到所有带有img标签图片集合
3.用window.onscroll来监听用户的行为,(混动滑轮)
4.滑动滑轮触发lazyloader函数
5.函数中对图片进行一个循环,判断每一张图片距离顶部的位置,(offsetTop),然后和屏幕高度加上滑动块儿距离顶部的高度(这边是为了算出滑动的高度+当前屏幕高度=当前位置距离顶部的位置高度)。
6.我们在外面定义了一个i = 0,为了防止,已经加载过了的图片再次重复进行循环判断

具体实现如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>图片懒加载</title>
		<style type="text/css">
			img {
				display: block;
				height: 200px;
			}
		</style>
	</head>
	<body>
		<div class="wrap">
			<img src="" alt="" data-src="./img/1.jpeg">
			<img src="" alt="" data-src="./img/2.jpeg">
			<img src="" alt="" data-src="./img/10.jpeg">
			<img src="" alt="" data-src="./img/11.jpeg">
			<img src="" alt="" data-src="./img/12.jpeg">
			<img src="" alt="" data-src="./img/13.jpeg">
			<img src="" alt="" data-src="./img/16.jpeg">
			<img src="" alt="" data-src="./img/18.jpeg">
			<img src="" alt="" data-src="./img/19.jpeg">
			<img src="" alt="" data-src="./img/20.jpeg">
			<img src="" alt="" data-src="./img/21.jpeg">
			<img src="" alt="" data-src="./img/22.jpeg">
			<img src="" alt="" data-src="./img/23.jpeg">
			<img src="" alt="" data-src="./img/24.jpeg">
			<img src="" alt="" data-src="./img/25.jpeg">
			<img src="" alt="" data-src="./img/26.jpeg">
			<img src="" alt="" data-src="./img/27.jpeg">
			<img src="" alt="" data-src="./img/28.jpeg">
			<img src="" alt="" data-src="./img/29.jpeg">
			<img src="" alt="" data-src="./img/30.jpeg">
			<img src="" alt="" data-src="./img/4.jpeg">
			<img src="" alt="" data-src="./img/5.jpeg">
			<img src="" alt="" data-src="./img/6.jpeg">
			<img src="" alt="" data-src="./img/7.jpeg">
			<img src="" alt="" data-src="./img/8.jpeg">
			<img src="" alt="" data-src="./img/9.jpeg">
			<img src="" alt="" data-src="./img/13.jpeg">
			<img src="" alt="" data-src="./img/15.jpeg">
			<img src="" alt="" data-src="./img/16.jpeg">
			<img src="" alt="" data-src="./img/20.jpeg">
		</div>
		<script type="text/javascript">
			//获取所有图片信息
			var imglength = document.getElementsByTagName("img");
			console.log(imglength);
			let n = 0;//为了防止已经加载过了的图片再次进行循环判断
			lazyloader();
			//注册窗口滚动事件
			window.onscroll = lazyloader;

			function lazyloader() {
				console.log("你滚动了窗口");
				//获取可见区域的高度(当前可视化窗口高度)
				var nowclientHeight = document.documentElement.clientHeight;
				console.log(nowclientHeight);
				//获取滚动条距离顶部的高度用scrollTop
				var scrolltop = document.body.scrollTop || document.documentElement.scrollTop;
				 console.log(scrolltop + nowclientHeight);
				for (let i = n; i < imglength.length; i++) {
					if (imglength[i].offsetTop < nowclientHeight + scrolltop) {
						if (imglength[i].getAttribute("src") == "") {
							imglength[i].src = imglength[i].getAttribute("data-src");
							console.log("当前n的值是" + n);
							n = i + 1;
						}
					}

				}
			}
		</script>
	</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值