1.为什么需要做图片的懒加载
=>第一次加载页面的时候,如果请求真实图片资源,会减缓页面的渲染速度,为了提高首次打开的体验度,我们最开始不加载真实的图片资源(比如大小很小的背景图片),只有当第一次页面整体都渲染完成后,页面中已经呈现出除图片以外的其它资源后,再去按需加载真实的图片资源渲染
=>进一步优化,最开始只加载首屏需要的图片,等到滚动条滚动的时候,再把当前屏幕中需要渲染的图片加载(避免不必要的资源加载)
2.解决步骤
1)给需要延迟加载的图片设置一个外层盒子,图片在这个盒子中
2)我们把图片的SRC设置为空,把后续需要请求的真实图片地址赋值给IMG的自定义属性
3)在最开始渲染的样式中
->给外层的盒子设置等待加载的背景LOGO(或者背景颜色,如果是背景图片,图片一定要非常的小,最好控制在5KB以内),让盒子起到一个占位的作用
->让所有的SRC为空的IMG默认是隐藏的
4)需要等到页面加载完成后(除图片资源,其它资源都加载完成了 window.onload),在JS中获取真实图片的地址,赋值给其SRC(此时才去加载真实的图片进行渲染)
代码实现:第一次加载页面
<head>
<style>
/* img自带样式*/
img:not([src]),
img[src=""] {
display: none
}
.lazyImgBox {
box-sizing: border-box;
width: 300px;
height: 500px;
background: url("images/default.gif") no-repeat center center #DDD;
}
.lazyImgBox img {
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<div class="lazyImgBox">
<img src="" alt="" data-image="images/1.jpg">
</div>
<!-- IMPORT JS -->
<script>
var lazyImgBox = document.querySelector('.lazyImgBox'),
img = lazyIm