JavaScript懒加载原理是什么,实现步骤是怎样
Admin 2022-06-22 群英技术资讯 717 次浏览
这篇文章给大家分享的是JavaScript懒加载原理是什么,实现步骤是怎样。小编觉得挺实用的,因此分享给大家做个参考,文中的介绍得很详细,而要易于理解和学习,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。顾名思义比较懒,不想全部加载出来,当用户什么时候想看我在加载后面的东西
概括:懒加载其实就是延时加载,即当对象需要用到的时候再去加载。
实现原理:
首先你要有很多个第一张用来加载的图片,加载完毕之后显示后面所需的图片
步骤实现:
1.加载load图片
2.判断哪些图片要加载
3.隐形加载图片
4.替换真图片
<style>
img {
width: 400px;
height: 300px;
display: block;
}
.row{
width: 300px;
height: 400px;
}
</style>
<img class="rwo" src="image/load.gif" alt="" data-original="image/图片 (1).jpeg">
<img class="rwo" src="image/load.gif" alt="" data-original="image/图片 (3).jpeg"">
<img class="rwo" src="image/load.gif" alt="" data-original="image/图片 (9).jpeg"">
<img class="rwo" src="image/load.gif" alt="" data-original="image/图片 (10).jpg"">
<img class="rwo" src="image/load.gif" alt="" data-original="image/图片 (13).jpeg"">
<img class="rwo" src="image/load.gif" alt="" data-original="image/图片 (92).jpeg"">
<img src="image/load.gif" alt="" data-original="image/图片 (1).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (2).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (19).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (23).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (33).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (37).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (38).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (39).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (40).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (41).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (42).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (43).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (44).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (45).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (46).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (47).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (48).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (49).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (50).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (51).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (52).jpg">
<img src="image/load.gif"alt="" data-original=" image/图片 (53).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (54).jpg">
为什么有两个路径?因为一个img中有一张真图片和一张假图片,我们得用先用假图片进行加载,然后用真图片去替换,下图中假图片为左侧,真图片为右侧

<script>
let view = document.documentElement.clientHeight;//获取浏览器窗口可视区的高度
function fn1(){
setTimeout(function lazyload() { //添加一个定时器一秒钟后开始执行
let imgs = document.querySelectorAll('img'); // 获取所有img标签
// console.log(imgs);
for (let item of imgs) { // 使用for-of遍历所有图片
// 显示图片出现在浏览器的位置
let rect = item.getBoundingClientRect(); // 找到每一个图片在可视区上的位置
console.log(rect);
if (rect.bottom >= 0 && rect.top < view) { //给个if语句如果图片的底部大于0并且小于这个浏览器的可视区域 ,就执行以下操作
item.src = item.getAttribute('data-original') // 获取data-original的路径传给img
}
}
},1000)
}
fn1();
document.addEventListener('scroll',fn1) //当滚动事件发生时就开始执行fn1函数里的任务
</script>
为什么用for-of而不用for-in或者for循环?具体可以去参考ES6中for-of获取的是什么
效果如下:

完整代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>懒加载</title>
<style>
img {
width: 400px;
height: 300px;
display: block;
}
.row{
width: 300px;
height: 400px;
}
</style>
</head>
<body>
<img class="rwo" src="image/load.gif" alt="" data-original="image/图片 (1).jpeg">
<img class="rwo" src="image/load.gif" alt="" data-original="image/图片 (3).jpeg"">
<img class="rwo" src="image/load.gif" alt="" data-original="image/图片 (9).jpeg"">
<img class="rwo" src="image/load.gif" alt="" data-original="image/图片 (10).jpg"">
<img class="rwo" src="image/load.gif" alt="" data-original="image/图片 (13).jpeg"">
<img class="rwo" src="image/load.gif" alt="" data-original="image/图片 (92).jpeg"">
<img src="image/load.gif" alt="" data-original="image/图片 (1).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (2).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (19).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (23).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (33).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (37).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (38).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (39).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (40).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (41).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (42).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (43).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (44).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (45).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (46).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (47).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (48).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (49).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (50).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (51).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (52).jpg">
<img src="image/load.gif"alt="" data-original=" image/图片 (53).jpg">
<img src="image/load.gif" alt="" data-original="image/图片 (54).jpg">
<script>
let view = document.documentElement.clientHeight;
function fn1(){
setTimeout(function lazyload() {
let imgs = document.querySelectorAll('img');
// console.log(imgs);
for (let item of imgs) {
// 显示图片出现在浏览器的位置
let rect = item.getBoundingClientRect();
console.log(rect);
if (rect.bottom >= 0 && rect.top < view) {
item.src = item.getAttribute('data-original')
}
}
},1000)
}
fn1();
document.addEventListener('scroll',fn1)
</script>
</body>
</html>
下面附上加载图片,当然了也可以自己找的(自己找的话我觉得挺麻烦的 —.—),如果其他图片也“懒”的自己找的话可以私我我整理好发给你 ღ( ´・ᴗ・` )

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家详细介绍了原生JS实现呼吸轮播图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
排序算法类型有哪些?排序算法类型有冒泡排序、选择排序、插入排序、希尔排序、堆排序、快速排序、归并排序这些,那么用JavaScript怎样实现这些排序算法呢?感兴趣的有接下来就跟随小编来学习一下吧。
状况:本地的前端项目(uni-app)以及后台管理(vue-mongo-node)和本地mongo数据库前台项目端口是8082,后台数据接口是8081.跨域解决,直接上代码:uni-app的mainfest.json下: 红色部分代理(node设置允许跨域之后,不加这部分的代理也可以跨域请求) 可加可不加"app-plus":{/*5+App特有相关*/"splashsc
这篇文章主要为大家详细介绍了Vue.js实现九宫格图片展示模块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要为大家详细介绍了JavaScript实现简单的拖拽效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008