前言
在我们浏览网页的时候,有没有发现有的时候当我们翻动鼠标的时候,页面才会给你显示出你要的内容,当我们不将鼠标下拉的时候,这些内容就不会显示出来。
就好比我们吃饭的时候,当我们吃完一份菜的时候,发现不是很饱,就再要一份,当我们吃饱了的时候,就不会再继续上菜了。
如果去吃饭的话,餐厅把所有的才做一遍,然后给你,一方面当所有菜做完了,你也饿的差不多晕了,另一方面,所有菜做下来既浪费金钱,吃不完又浪费粮食。
懒加载就是这样,他会先给你显示一部分页面的内容,当你想要继续向下浏览的时候,他再继续给你显示一部分的内容,知道整个页面全部浏览完成的时候,你才能看到这个页面的所有内容。这个过程就叫做,页面的懒加载。
这样做的好处就是节省浏览器加载所需要的时间,如果浏览器全部加载的话,就会需要大量的时间进行渲染,而使用懒加载,就可以节省时间,优化浏览器的性能。
懒加载的原理
懒加载的原理就是将一部分的内容浏览器先不进行加载,当用户需要的时候,浏览器再进行加载。
如何实现懒加载
如果我们需要懒加载的时候,我们首先要确定几个问题;
- 如何加载图片
- 浏览器什么时候加载图片
如何加载图片
![](xxxx.jpg)
当完成上述代码的时候,浏览器就会对这个图片进行解析,加载图片
如果我们不想要浏览器加载这个图片的话,可以将src中的内容清空,只保留了img的标签,但不会对图片进行加载
![]( )
上述的代码表示,保留了img标签,但是不加载图片,如果我们在某个时间需要这个img标签加载图片的话,就可以将自定义的标签属性中的内容放入img标签的src中。
这样图片就会加载出来了。
#####浏览器什么时候加载图片
确定浏览器什么时候加载图片,我们就必须要确认几个问题
- 确定节点在浏览器中的位置
只有确定了节点在浏览器的位置,我们才能能确定浏览器是否要加载,如何确定一个节点在浏览器上的位置呢?
windowHeight表示浏览器的高度;
scrollTop表示页面的滚动的距离;
offsetTop表示节点距离最顶端的距离;
nodeHeight表示节点自身的高度
所以如何确定节点是否显示在浏览器上必须同时满足两个条件:
1. windowHeight(浏览器的高度)+scrollTop(页面的滚动的距离)>offsetTop(节点距离最顶端的距离)
2. offsetTop(节点距离最顶端的距离)+nodeHeight(节点自身的高度)>scrollTop(页面的滚动的距离)
将它转化为代码表示为:
- 确定加载图片时间
这个问题和第一个问题是紧密相连的,其实当确定节点只要显示在浏览器上,就可以确定加载图片的时间,代码展示为
这样就完成了图片的懒加载
图片懒加载
这个demo在每次进行滚动的时候都会监听所有的图片,这样导致大量无意义的工作,所以我们要优化一下,我们可以在每一个加载完成的图片上添加一个class名,当滚动的时候会跳过这些带有class名的图片,这样就大大简化了浏览器的工作量
这个就需要自己动手完成了
当然我们可以扩展成为一个新闻的懒加载:
结语:
懒加载说简单也仅仅是简单的几行代码,可是里面所牵扯的数字问题对于我来说,还是有一定的复杂度在里面,努力的学习就是进步,为自己加油!!!