图片懒加载的原理
admin
2024-02-29 01:49:12
0

文章目录

    • 懒加载的概念
    • 懒加载实现的原理
    • 可视区域表示
        • 原理:
        • 过程:

懒加载的概念

对于页面有很多静态资源的情况下(比如网商购物页面),为了节省用户流量和提高页面性能,可以在用户浏览到当前资源(当前窗口(可视区域)的大小)的时候,再对资源进行请求和加载。

懒加载实现的原理

  • 1,使用img标签,scr属性初始为空
  • 2,写一个自定义属性字段,该属性的值写成图片地址
  • 3,当图片在可视区域的范围内的时候,将自定义属性的值作为src的值

代码示例:


  • data-src是我们自己定义的属性字段,它的值为我们要的图片地址
  • lazyload="true"是为了当图片加载出来后将图片不在需要懒加载了。

可视区域表示

原理:

使用:document.documentElement.clientHeight 可以获取到当前屏幕的高度。

过程:

当页面发生上滑的时候,可视区域的图片就会发生改变。

当鼠标滚轮滚动的时候,在可视区域的图片就可能出去可视区域了,不在的可能这时候就进来了可视区域。所以我们要写一个监听事件来进行监听

当我们拿到所有的 img 时,利用循环去判断他们是否在可视区域内,在就加载出来,不在就暂时不加载。

需要满足的条件是图片的顶部在可视区域的高度里面,图片的底部也要在可视区域里面,也就是图片没有被划出去。

代码:

//获取可视区域的高度
var viewHeight = document.documentElement.clientHeight;
document.addEventListener("scroll", function() {//获取到页面上所有的img//判断某个是否进入可视区域//如果进入,就把它自身的data-original的值取出来放到srcvar arr = document.querySelectorAll("img[data-src][lazyload]");arr.forEach((item) => {let rect = item.getBoundingClientRect(); //用于一次性获取某个容器相对于浏览器上下左右的位置if (rect.top < viewHeight && rect.bottom >= 0) {item.src = item.dataset.src;item.removeAttribute("data-src");item.removeAttribute("lazyload");}});
});

获取区域的方法:

  • offsetTop方法: 图片出现在视窗内的情况: offsetTop < clientHeight + scrollTop
  • getBoundingClientRect方法: 图片出现在视窗内的情况: element.getBoundingClientRect().top < clientHeight
  • H5的intersectionObserve方法: intersectionRatio:目标元素的可见比例,即 intersectionRect 占 boundingClientRect 的比例,完全可见时为 1 ,完全不可见时小于等于 0

代码:
一般是常用offsetTop的方法

// offsetTop
// el.offsetTop - document.documentElement.scrollTop <= viewPortHeight
function isInViewPortOfOne (el) {// viewPortHeight 兼容所有浏览器写法const viewPortHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight const offsetTop = el.offsetTopconst scrollTop = document.documentElement.scrollTopconst top = offsetTop - scrollTopreturn top <= viewPortHeight
}

相关内容

热门资讯

大兴国际机场迎来第1000万名... 来自哈萨克斯坦的Aziza(左)幸运地成为大兴国际机场口岸第1000万名出入境旅客。 本报讯(记者 ...
浓清酱芝,占尽中国白酒核心产区... 春开窖·中国香——浓清酱芝四韵和鸣,元亨利贞万象天成!春开窖酒行,喝好酒,交挚友;好酒,好茶,好生活...
大学生去桂林六日游价格多少一人... 作为一名学生党,一直对桂林的山水有着深深的向往。桂林,这个有着“山水甲天下”美誉的地方,仿佛是大自然...
原创 教... 标题:教你一道简单美味的糖醋排骨,1分钟能学会,学会后让人刮目相看。 在美食的世界里,总有那么几道...
家常烤箱版茄子的美味做法,简单... 在这个快节奏的生活中,有时候我们会觉得做饭是一件麻烦的事情,尤其是面对一些复杂的菜肴。可是,今天要跟...
麻婆豆腐:麻辣鲜香,米饭杀手,... 嘿,朋友们!今天我要给你们介绍一道超级下饭的家常菜——麻婆豆腐。这道菜不仅色香味俱全,而且做法简单,...
原创 2... 2025年7月,21岁的包佳千捧起第53届UIBC国际青年烘焙师大赛冠军奖杯,镁光灯定格了她沾着面粉...
节假日去桂林六日游自由行多少钱... 暑假来临,正是出游的好时节!我和朋友们一直对桂林的山水情有独钟,早就计划着要去那里好好游玩一番。桂林...
原创 克... 在这个光怪陆离的时代,名流的生活总是处于聚光灯之下。近日,浩瀚的意大利湖泊科莫湖边,闪耀着好莱坞男星...
国际荐酒师(香港)协会发布白酒... 国际荐酒师(香港)协会中国白酒国际荐酒师发布白酒英文翻译规范与品牌全球化战略 ——明确“Baij...
揭秘:春开窖如何靠“浓清酱芝+... 春开窖·中国香——浓清酱芝四韵和鸣,元亨利贞万象天成!春开窖酒行,喝好酒,交挚友;好酒,好茶,好生活...
猕猴桃泡酒怎么做?3个步骤轻松... 猕猴桃泡酒怎么做?如果你是泡酒爱好者,肯定知道泡酒的奥秘,而猕猴桃泡酒更因其独特的果香和口感受到许多...
原创 河... 前几天在夜市闲逛,一股熟悉的香味扑鼻而来。我一转头,看到好几个小摊上都摆着一盒盒炸得金黄酥脆的小虫子...
原创 排... 标题:排骨是热水还是冷水下锅?知道了秘诀,做出来的排骨汤就是香! 在烹饪的世界里,排骨汤以其浓郁的...
原创 早... 标题:早餐这么做,有营养有颜值,孩子吃了长个,女人吃了减肥,真不错 在这个追求健康与美丽的时代,早...
铁岭火勺:外皮酥到掉渣,配羊汤... 铁岭火勺是辽宁铁岭极具代表性的传统美食,以外皮酥到掉渣的独特口感和鲜香的内馅闻名。它不仅是当地人早餐...
金黄诱惑:自制香甜玉米烙饼的秘... 大家好!今天我要和大家分享一道简单又美味的家常美食——玉米烙饼。这道菜不仅色香味俱全,而且制作起来也...