懒加载,就是用到了再进行加载操作,淘宝下方的商品展示一直都是滚动不完的,因为数据很多,有时候滚动下去后发现图片还在加载,这就运用到懒加载,不使用懒加载会导致最开始进入页面时进行的请求过于繁杂,导致加载缓慢,并且浪费流量加载一些没必要显示的图片信息。

对于懒加载的使用,一般是显示在图片方面,对于图片被滚动到可视区域时,进行懒加载操作。

 

首先先了解窗口的可视区域,懒加载用到了三个滚动的API

document.documentElement.clientHeight//获取屏幕可视区域的高度
HtmlElement.offsetTop // 获取浏览器窗口顶部到目标图片顶部的距离
Element.scrollTop //滚动了多少距离

懒加载原理_原生js

通过上面的图片可以进行理解,当offsetTop-scroolTop<clientHeight,图片就滚动到当前的可视区域,进行请求操作此处对于原生js进行编写例
 1     <img src="./images/1.jpg" alt="">
 2     <img src="./images/2.jpg" alt="">
 3     <img src="./images/3.jpg" alt="">
 4     <img src="./images/4.jpg" alt="">
 5     <img src="./images/5.jpg" alt="">
 6     <img src="./images/6.jpg" alt="">
 7     <img src="./images/7.jpg" alt="">
 8     <img src="./images/8.jpg" alt="">
 9     <img src="./images/9.jpg" alt="">
10     <img src="./images/10.jpg" alt="">
11     <img src="./images/1.jpg" alt="">
12     <img src="./images/2.jpg" alt="">

 

 1 //对全部图片进行选中
 2 var imgs = document.querySelectorAll('img');
 3 
 4 //offsetTop是元素与offsetParent的距离,循环获取直到页面顶部,此处时为了滚动而更新图片位置
 5 //offsetTop是相对于父元素的,所以需要加上一个offsetParent
 6 function getTop(e) {
 7     var T = e.offsetTop;
 8     while(e = e.offsetParent) {
 9         T += e.offsetTop;
10     }
11     return T;
12 }
13 
14 //懒加载方法
15 function lazyLoad(imgs) {
16     var H = document.documentElement.clientHeight;//获取可视区域高度
17     var S = document.documentElement.scrollTop || document.body.scrollTop; //获取滚动了多少高度
18     for (var i = 0; i < imgs.length; i++) {
19         //当可视区域高度+滚动了多少的高度大于图片本身位于页面顶部的高度
20         if (H + S > getTop(imgs[i])) {
21             imgs[i].src = imgs[i].getAttribute('data-src');
22         }
23     }
24 }
25 
26 //在滚动条滚动的时候判断触发
27 window.onload = window.onscroll = function () { 
28     lazyLoad(imgs);
29 }
现阶段市面上的组件库一般都自带懒加载的方式,上面也是其中一种方式,因为频繁的滚动会造成高强度的请求操作,可以进行防抖操作