JavaScript懒加载详解

 更新时间:2021年11月01日 15:34:00   作者:Nanchen_42  
这篇文章主要为大家详细介绍了JS实现页面数据懒加载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

懒加载

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

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

实现原理:

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

步骤实现:

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

CSS样式:

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

HTML部分:

  <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部分 :

    <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>

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

总结

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

相关文章

  • JavaScript实现简单验证码

    JavaScript实现简单验证码

    这篇文章主要为大家详细介绍了JavaScript实现简单验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • js 实现css风格选择器(压缩后2KB)

    js 实现css风格选择器(压缩后2KB)

    近日在做一些OA前端界面,为了更好管理页面代码想写个js选择器,写着写着发现很费力,索性在网上找找看,功夫不负有心人, 找到一个mini css选择器,且性能不凡:以下代码是压缩后的,仅2KB
    2012-01-01
  • 简单实例处理url特殊符号&处理(2种方法)

    简单实例处理url特殊符号&处理(2种方法)

    url里的参数内容包含&符合,我有两种方法解决一是:在页面用JS转码;二是:在后端处理,另外还有网络分享的一些方法,感兴趣的朋友可以参考下哈
    2013-04-04
  • 微信小程序图片上传以及内容安全审核详解

    微信小程序图片上传以及内容安全审核详解

    踩了很多次坑,终于在微信小程序中搞定了图片上传以及内容安全审核,下面这篇文章主要给大家介绍了关于微信小程序图片上传以及内容安全审核的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • js获取本机操作系统类型的两种方法

    js获取本机操作系统类型的两种方法

    这篇文章主要介绍了js获取本机操作系统类型的方法,需要的朋友可以参考下
    2015-12-12
  • 很实用的js选项卡切换效果

    很实用的js选项卡切换效果

    很棒的JavaScript选项卡切换效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • 教你如何通过JavaScript读取元素的样式

    教你如何通过JavaScript读取元素的样式

    这篇文章主要给大家介绍了关于如何通过JavaScript读取元素的样式,文中通过实例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • JavaScript中set与get方法用法示例

    JavaScript中set与get方法用法示例

    这篇文章主要介绍了JavaScript中set与get方法用法,简单描述了set与get方法的功能,并结合实例形式分析了set与get方法的具体使用技巧,需要的朋友可以参考下
    2018-08-08
  • JavaScript判断变量是否为空的自定义函数分享

    JavaScript判断变量是否为空的自定义函数分享

    这篇文章主要介绍了JavaScript判断变量是否为空的自定义函数分享,本文直接给出实现代码,需要的朋友可以参考下
    2015-01-01
  • 优化 JavaScript 代码的方法小结

    优化 JavaScript 代码的方法小结

    客户端脚本能让你的应用更加地动态和活跃, 但是浏览器对代码的解析可能造成效率问题, 而这种性能差异在客户端之间也不尽相同。 这里我们讨论和给出一些优化你的 JavaScript 代码的提示和最佳实践。
    2009-07-07

最新评论