JavaScript懒加载原理是什么,实现步骤是怎样
Admin 2022-06-22 群英技术资讯 257 次浏览
顾名思义比较懒,不想全部加载出来,当用户什么时候想看我在加载后面的东西
概括:懒加载其实就是延时加载,即当对象需要用到的时候再去加载。
实现原理:
首先你要有很多个第一张用来加载的图片,加载完毕之后显示后面所需的图片
步骤实现:
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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
目录我使用的命令是 vue ui 可视化打包操作进入可视化面板需要通过vue.config.js来配置.js文件中,导致该js文件过大通常在一个vue项目中会用到很多插件什么,swiper,axios,vuerouter,vuex,…,那么使用了很多插件势必会造成打包的js文件过大,影响加载速度,造成不好的用户体验,那
NaN返回NaN的操作数。无限大除以无限大,返回NaN。0除以0返回NaN,无限除以0,无限返回,有限数除以0返回无限大。将Number(a)转换后运算,而不是数值。
前端开发人员只要了解过vue.js框架可能都知道单文件组件。vue.js中的单文件组件允许在一个文件中定义一个组件的所有内容。这是一个非常有用的解决方案,在浏览器网页中已经开始提倡这种机制。
这篇文章主要为大家详细介绍了jQuery实现表单验证功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在jquery中,可以利用one()函数让方法只触发一次,当使用该函数时,每个元素只能运行一次事件处理方法,语法为“元素对象.one("事件",事件处理方法);”。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008