我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript懒加载详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript懒加载详解

懒加载

顾名思义比较懒,不想全部加载出来,当用户什么时候想看我在加载后面的东西

概括:懒加载其实就是延时加载,即当对象需要用到的时候再去加载。

实现原理:

首先你要有很多个第一张用来加载的图片,加载完毕之后显示后面所需的图片

步骤实现:

1.加载load图片
2.判断哪些图片要加载
3.隐形加载图片
4.替换真图片

CSS样式:


    <style>
        img {
            width: 400px;
            height: 300px;
            display: block;
        }
        .row{
            width: 300px;
            height: 400px;
        }
    </style>

HTML部分:


  <img class="rwo" class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (1).jpeg">
        <img class="rwo" class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (3).jpeg"">
        <img class="rwo" class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (9).jpeg"">
        <img class="rwo" class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (10).jpg"">
        <img class="rwo" class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (13).jpeg"">
        <img class="rwo" class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (92).jpeg"">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (1).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (2).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (19).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (23).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (33).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (37).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (38).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (39).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (40).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (41).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (42).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (43).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (44).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (45).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (46).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (47).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (48).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (49).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (50).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (51).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (52).jpg">
        <img  class="lazy" data-src="image/load.gif"alt="" data-original=" image/图片 (53).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (54).jpg">

 为什么有两个路径?因为一个img中有一张真图片和一张假图片,我们得用先用假图片进行加载,然后用真图片去替换,下图中假图片为左侧,真图片为右侧

script部分 :


    <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.class="lazy" data-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" class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (1).jpeg">
        <img class="rwo" class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (3).jpeg"">
        <img class="rwo" class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (9).jpeg"">
        <img class="rwo" class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (10).jpg"">
        <img class="rwo" class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (13).jpeg"">
        <img class="rwo" class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (92).jpeg"">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (1).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (2).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (19).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (23).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (33).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (37).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (38).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (39).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (40).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (41).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (42).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (43).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (44).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (45).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (46).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (47).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (48).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (49).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (50).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (51).jpg">
        <img  class="lazy" data-src="image/load.gif" alt="" data-original="image/图片 (52).jpg">
        <img  class="lazy" data-src="image/load.gif"alt="" data-original=" image/图片 (53).jpg">
        <img  class="lazy" data-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.class="lazy" data-src = item.getAttribute('data-original')
                }
            }
        },1000)
        }
        fn1();
        document.addEventListener('scroll',fn1)
    </script>
</body>
 
</html>

下面附上加载图片,当然了也可以自己找的(自己找的话我觉得挺麻烦的  —.—),如果其他图片也“懒”的自己找的话可以私我我整理好发给你   ღ( ´・ᴗ・` )

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript懒加载详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue路由的懒加载深入详解

这篇文章主要介绍了vue-router路由懒加载及实现方式,路由懒加载的主要作用是将 路由对应的组件打包成一个个的js代码块,只有在这个路由被访问到的时候,才会加载对应组件的代码块,需要的朋友可以参考下
2022-12-26

VUE懒加载原理详解:一文带你读懂图片懒加载的奥秘

懒加载是一种通过延迟加载资源,以提高网页加载速度和性能的技术。它可以有效减少初始页面加载时间,从而提高用户体验和网站排名。本文将详细讲解 VUE 懒加载的原理,帮助您理解图片懒加载的奥秘。
VUE懒加载原理详解:一文带你读懂图片懒加载的奥秘
2024-02-13

详解elCascader懒加载数据回显示例

这篇文章主要为大家介绍了详解elCascader懒加载数据回显示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

JavaScript怎么实现图片懒加载

本篇内容介绍了“JavaScript怎么实现图片懒加载”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实现思路实现图片懒加载我们需要先明白具体
2023-07-02

JavaScript如何实现图片懒加载

这篇文章主要介绍了JavaScript如何实现图片懒加载,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。图片懒加载imagegetBoundClientRect 的实现方式,监
2023-06-27

详解如何在Java中实现懒加载

懒加载是一种常见的优化技术,它可以延迟对象的创建或初始化,直到对象第一次被使用时才进行。在本文中,我们将介绍如何使用 Java 中的 Supplier 接口和双重检查锁定模式来实现懒加载,并保证只初始化一次,希望对大家有所帮助
2023-03-19

javascript如何实现图片预加载和懒加载功能

这篇文章主要介绍“javascript如何实现图片预加载和懒加载功能”,在日常操作中,相信很多人在javascript如何实现图片预加载和懒加载功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”javascr
2023-06-14

python反爬之懒加载

# 在平时的爬虫中,如果遇到没有局部刷新,没有字体加密,右键检查也能看到清晰的数据,但是按照已经制定好的解析规则进行解析时,会返回空数据,这是为什么呢,这时可以在网页右键查看一下网页源代码,可以发现,在网页上的源代码中有些部分是正确的,有些
2023-01-30

编程热搜

目录