图片懒加载
在项目开发中,页面存在大量的图片,如果把图片都全部加载出来,此时页面加载可能会出现卡顿灯情况,对用户来说,流量耗费也是很大的,此时,对页面图片作懒加载处理是很有必要的。
在项目开发中,页面存在大量的图片,如果把图片都全部加载出来,此时页面加载可能会出现卡顿灯情况,对用户来说,流量耗费也是很大的,此时,对页面图片作懒加载处理是很有必要的。
懒加载的目的
在页面需要的时候才发送请求去加载资源,不需要的时候就不加载,这样可以减少请求,节约资源。
当img标签中有src属性时都会发送请求,所以通常在做图片懒加载时先不设置src属性,后面通过js添加该属性,来显示要显示的内容
懒加载的大概原理
- img标签不设置src属性
- 监听浏览器可视区域,图片若出现在可是区域内,则加载、显示图片
主要实现代码
判断元素是否在可视区域
方法一:
- 通过document.documentElement.clientHeight获取屏幕可视窗口高度
- 通过element.offsetTop获取元素相对于文档顶部的距离
- 通过document.documentElement.scrollTop获取浏览器窗口顶部与文档顶部之间的距离,也就是滚动条滚动的距离
- 判断②-③ 与①的大小方法二:
1
2
3
4
5
6
7function isInsight(el){
let viewsHei = document.documentElement.clientHeight;
let offsetTop = el.offsetTop;
let scrollTop = document.documentElement.scrollTop
return offsetTop - scllTop < viewsHei
}通过getBoundingClientRect()方法来获取元素的大小以及位置,该方法返回一个名为ClientRect的DOMRect对象,包含了top、right、botton、left、width、height这些值。该方法的兼容性:请点这里
1 | function isInSight(el) { |
加载图片
页面打开时需要对所有图片进行检查,是否在可视区域内,如果是就加载
1 | let isShowIndex = 0; //标记图片是否已经加载 |
完整代码
html部分
1 | <img data-src="image/js.jpg" alt=""> |
js部分
1 | window.onload = window.onscroll = function () { |
这样就实现了一个简易的图片的懒加载
由于页面滚动事件是一个高频触发的事件,需要作相应处理,使被执行函数不会被频繁执行