当一个页面上有大量的图片,加载很慢,如何优化这些图片的加载,给用户更好的体验,延迟加载就是一种方式
html 布局代码
这里自定义orc属性,用来存放图片资源的路径,用于后面真正加载时候把图片的路径复制给src,一开始src存放的都是统一的压缩一个动图
<div id="box" class="box">
<img src="./images/loading.gif" orc="./images/01.jpg" alt="">
<img src="./images/loading.gif" orc="./images/02.jpg" alt="">
<img src="./images/loading.gif" orc="./images/03.jpg" alt="">
<img src="./images/loading.gif" orc="./images/04.jpg" alt="">
<img src="./images/loading.gif" orc="./images/05.jpg" alt="">
<img src="./images/loading.gif" orc="./images/06.jpg" alt="">
<img src="./images/loading.gif" orc="./images/07.jpg" alt="">
<img src="./images/loading.gif" orc="./images/08.jpg" alt="">
<img src="./images/loading.gif" orc="./images/09.jpg" alt="">
<img src="./images/loading.gif" orc="./images/10.jpg" alt="">
<img src="./images/loading.gif" orc="./images/11.jpg" alt="">
<img src="./images/loading.gif" orc="./images/12.jpg" alt="">
<img src="./images/loading.gif" orc="./images/13.jpg" alt="">
<img src="./images/loading.gif" orc="./images/14.jpg" alt="">
<img src="./images/loading.gif" orc="./images/15.jpg" alt="">
<img src="./images/loading.gif" orc="./images/16.jpg" alt="">
<img src="./images/loading.gif" orc="./images/17.jpg" alt="">
<img src="./images/loading.gif" orc="./images/18.jpg" alt="">
<img src="./images/loading.gif" orc="./images/19.jpg" alt="">
<img src="./images/loading.gif" orc="./images/20.jpg" alt="">
<img src="./images/loading.gif" orc="./images/21.jpg" alt="">
<img src="./images/loading.gif" orc="./images/22.jpg" alt="">
<img src="./images/loading.gif" orc="./images/23.jpg" alt="">
<img src="./images/loading.gif" orc="./images/24.jpg" alt="">
<img src="./images/loading.gif" orc="./images/25.jpg" alt="">
<img src="./images/loading.gif" orc="./images/26.jpg" alt="">
<img src="./images/loading.gif" orc="./images/27.jpg" alt="">
<img src="./images/loading.gif" orc="./images/28.jpg" alt="">
<img src="./images/loading.gif" orc="./images/29.jpg" alt="">
<img src="./images/loading.gif" orc="./images/30.jpg" alt="">
<img src="./images/loading.gif" orc="./images/31.jpg" alt="">
<img src="./images/loading.gif" orc="./images/32.jpg" alt="">
</div>
内部书写的css代码
<style>
.box{
width: 1040px;
margin: 0 auto;
overflow: hidden;
}
.box img{
width: 500px;
height: 300px;
margin: 10px;
float: left;
}
</style>
js代码
<script>
var oBox = document.getElementById("box");
var oImgs = document.querySelectorAll(" #box img");
var flag = true;//定义节流函数开关
var n = 0;//定义一个变量来保存加载的图片数量
//图片懒加载原理,在页面上的未可视区域添加一个滚动条事件,
//判断当图片距离文档顶部长度 <= 滚动条滚过的距离+窗口的高度 , 那么就进行图片优先加载
window.onscroll = function () {
//判断是否为false
if(!flag){
return
}
flag = !flag;//开关取反
lazyLoad();//执行加载图片函数
//节流函数
setTimeout(function () {
flag = !flag;
},200);
}
lazyLoad();//初始化加载图片
function lazyLoad() {
// 注意这里将n赋值给i,原理就是页面没有滚动时候n不增加,图片不加载
for (var i=n;i<oImgs.length;i++){
//图片距离文档顶部长度 <= 滚动条滚过的距离+窗口的高度
if(oImgs[i].offsetTop <= document.documentElement.scrollTop + window.innerHeight){
oImgs[i].src = oImgs[i].getAttribute("orc");//把orc图片路径,复制给src
n++;//页面继续滚动n增加
}
}
}
</script>
最后打包拿走不客气
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>延迟加载练习</title>
<style>
.box{
width: 1040px;
margin: 0 auto;
overflow: hidden;
}
.box img{
width: 500px;
height: 300px;
margin: 10px;
float: left;
}
</style>
</head>
<body>
<div id="box" class="box">
<img src="./images/loading.gif" orc="./images/01.jpg" alt="">
<img src="./images/loading.gif" orc="./images/02.jpg" alt="">
<img src="./images/loading.gif" orc="./images/03.jpg" alt="">
<img src="./images/loading.gif" orc="./images/04.jpg" alt="">
<img src="./images/loading.gif" orc="./images/05.jpg" alt="">
<img src="./images/loading.gif" orc="./images/06.jpg" alt="">
<img src="./images/loading.gif" orc="./images/07.jpg" alt="">
<img src="./images/loading.gif" orc="./images/08.jpg" alt="">
<img src="./images/loading.gif" orc="./images/09.jpg" alt="">
<img src="./images/loading.gif" orc="./images/10.jpg" alt="">
<img src="./images/loading.gif" orc="./images/11.jpg" alt="">
<img src="./images/loading.gif" orc="./images/12.jpg" alt="">
<img src="./images/loading.gif" orc="./images/13.jpg" alt="">
<img src="./images/loading.gif" orc="./images/14.jpg" alt="">
<img src="./images/loading.gif" orc="./images/15.jpg" alt="">
<img src="./images/loading.gif" orc="./images/16.jpg" alt="">
<img src="./images/loading.gif" orc="./images/17.jpg" alt="">
<img src="./images/loading.gif" orc="./images/18.jpg" alt="">
<img src="./images/loading.gif" orc="./images/19.jpg" alt="">
<img src="./images/loading.gif" orc="./images/20.jpg" alt="">
<img src="./images/loading.gif" orc="./images/21.jpg" alt="">
<img src="./images/loading.gif" orc="./images/22.jpg" alt="">
<img src="./images/loading.gif" orc="./images/23.jpg" alt="">
<img src="./images/loading.gif" orc="./images/24.jpg" alt="">
<img src="./images/loading.gif" orc="./images/25.jpg" alt="">
<img src="./images/loading.gif" orc="./images/26.jpg" alt="">
<img src="./images/loading.gif" orc="./images/27.jpg" alt="">
<img src="./images/loading.gif" orc="./images/28.jpg" alt="">
<img src="./images/loading.gif" orc="./images/29.jpg" alt="">
<img src="./images/loading.gif" orc="./images/30.jpg" alt="">
<img src="./images/loading.gif" orc="./images/31.jpg" alt="">
<img src="./images/loading.gif" orc="./images/32.jpg" alt="">
</div>
<script>
var oBox = document.getElementById("box");
var oImgs = document.querySelectorAll(" #box img");
var flag = true;//定义节流函数开关
var n = 0;//定义一个变量来保存加载的图片数量
//图片懒加载原理,在页面上的未可视区域添加一个滚动条事件,
//判断当图片距离文档顶部长度 <= 滚动条滚过的距离+窗口的高度 , 那么就进行图片优先加载
window.onscroll = function () {
//判断是否为false
if(!flag){
return
}
flag = !flag;//开关取反
lazyLoad();//执行加载图片函数
//节流函数
setTimeout(function () {
flag = !flag;
},200);
}
lazyLoad();//初始化加载图片
function lazyLoad() {
// 注意这里将n赋值给i,原理就是页面没有滚动时候n不增加,图片不加载
for (var i=n;i<oImgs.length;i++){
//图片距离文档顶部长度 <= 滚动条滚过的距离+窗口的高度
if(oImgs[i].offsetTop <= document.documentElement.scrollTop + window.innerHeight){
oImgs[i].src = oImgs[i].getAttribute("orc");//把orc图片路径,复制给src
n++;//页面继续滚动n增加
}
}
}
</script>
</body>
</html>