javascript实现图片延迟加载方法汇总(三种方法)

yizhihongxing

以下是详细的Markdown格式文本,包含了“JavaScript实现图片延迟加载方法汇总(三种方法)”这个主题的完整攻略:

JavaScript实现图片延迟加载方法汇总(三种方法)

在网页中长时间加载大量图片可能成为页面加载速度缓慢的主要原因。一种解决方案是通过延迟加载,只有当图片即将出现在用户的视野范围内时才开始加载。在下面的文本中我们将分享三个可以在网站上实现图片延迟加载的JavaScript方法。

方法一: 函数实现

第一个方法使用JavaScript编写基本的函数,利用元素节点的scrollTop和offsetTop属性实现图片延迟加载。当元素节点的scrollTop值大于等于图片距离顶部的offsetTop值的时候图片开始加载。

function lazyLoad() {
    const images = document.getElementsByTagName("img");
    const len = images.length;
    const n = 0;
    return function() {
        const seeHeight = window.innerHeight;
        const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
        for (let i = n; i < len; i++) {
            if (images[i].offsetTop < seeHeight + scrollTop) {
                if (images[i].getAttribute("src") === "default.jpg") {
                    images[i].src = images[i].getAttribute("data-src");
                }
                n = i + 1;
            }
        }
    }
}
document.addEventListener('scroll', lazyLoad());

方法二: 使用IntersectionObserver

IntersectionObserver API 是浏览器提供的一种观察者模式,它可以在目标节点进入或离开视图的情况下异步执行回调。简而言之,我们可以使用IntersectionObserver实现图片的延迟加载,只有当图片出现在用户的视野范围内时再进行加载。

function lazyLoad() {
    let images = document.querySelectorAll('img[data-src]');
    if ('IntersectionObserver' in window) {
        let observer = new IntersectionObserver(function (entries, observer) {
            entries.forEach(function (entry) {
                if (entry.isIntersecting) {
                    let lazyImage = entry.target;
                    lazyImage.src = lazyImage.dataset.src;
                    observer.unobserve(lazyImage);
                }
            })
        }, 
        {
          rootMargin: '300px 0px',
          threshold: 0.1
        });
        images.forEach(function (lazyImage) {
            observer.observe(lazyImage);
        });
    }  
}
document.addEventListener('DOMContentLoaded', lazyLoad);

方法三: 使用jQuery插件

最后一个方法是使用jQuery插件,这些插件由自己提供的API实现图片延迟加载。我们可以使用任何一个为jQuery编写的现成的图像延迟加载插件,如Lazy Load、Unveil.js等等。

<script src="https://cdn.bootcss.com/jquery/3.2.0/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/jquery_lazyload/1.9.7/jquery.lazyload.min.js"></script>
<script>
$(function () {
    $("img").lazyload({
        threshold: 200,
        effect: "fadeIn"
    });
});
</script>

我们仅展示了其中一个jQuery插件,但我们可以使用同等有效的其他插件。注意,使用插件需要引入其JS库。

在以上的三种方法中,你可以根据你的实际情况选择最适合你的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript实现图片延迟加载方法汇总(三种方法) - Python技术站

(1)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Windows系统环境变量大全 举例说明(XP/Win7/Win8)

    Windows系统环境变量大全 举例说明(XP/Win7/Win8) 什么是环境变量 环境变量是指在操作系统中预先设定好的一些参数,用于存储与操作系统有关的信息,如系统路径、JAVA_HOME等。我们可以通过修改环境变量来实现对系统参数的修改。 环境变量的类型 Windows系统环境变量可以分为用户环境变量和系统环境变量。 用户环境变量 用户环境变量属于当前…

    other 2023年6月27日
    00
  • Win10 19H2慢速预览18362.10019怎么手动升级?

    当你想要手动升级Win10 19H2慢速预览18362.10019时,可以按照以下步骤进行: 步骤一:确认当前系统版本号 首先需要确认一下自己当前系统的版本号,可以按照以下步骤进行: 打开“设置”应用,在“系统”选项卡中找到“关于”选项; 在“关于”选项中,可以查看到当前系统的版本号。 当前Win10 19H2慢速预览的版本号为18362.10019。 步骤…

    other 2023年6月27日
    00
  • 对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解

    【对jQuery的Ajax进行二次封装】 在实际的开发中,我们可能会在多次使用jQuery的Ajax时对其进行二次封装,目的是为了提高代码的复用性和减少代码的冗余。这里提供一种基于Promise的封装方式示例: “`javascript function myAjax(method, url, params) { return new Promise(fu…

    other 2023年6月25日
    00
  • 浅谈CSS3 动画卡顿解决方案

    下面我就为你详细讲解“浅谈CSS3 动画卡顿解决方案”的完整攻略。 根本原因 首先,我们需要了解CSS3动画卡顿的根本原因。CSS3动画的实现方式是通过改变元素的样式来实现动画的效果,而当我们连续对一个元素进行多次样式改变时,就会发生卡顿的现象。 那么如何解决这个问题呢? 解决方案 1. 使用transform 可以使用transform代替position…

    other 2023年6月26日
    00
  • apache开源项目–Cassandra

    Apache开源项目——Cassandra 什么是Cassandra? Cassandra 是一个分布式、高度可扩展的 NoSQL 数据库系统,由 Facebook 开发并开源,后被 Apache 基金会接手管理。Cassandra 以其可扩展性,高性能和容错性而著名,是许多企业和组织中重要的数据存储解决方案。 Cassandra 的特点 分布式 Cassa…

    其他 2023年3月28日
    00
  • 2000-XP-2003操作系统常见问题集锦之日常使用问题

    2000-XP-2003操作系统常见问题集锦之日常使用问题攻略 Microsoft Windows 2000、Windows XP和Windows Server 2003是广泛使用的操作系统,本攻略旨在解决常见的日常使用问题。 1.如何更改计算机名称 进入“系统属性” 点击“计算机名”选项卡 点击“更改”按钮来更改计算机名称。 2.如何启用/禁用系统还原 进…

    other 2023年6月27日
    00
  • 苹果WWDC 2016开发者大会时间确定:发布iOS10/OS X 10.12

    苹果WWDC 2016开发者大会时间确定:发布iOS10/OS X 10.12 苹果公司每年都会举办一次WWDC(Worldwide Developers Conference,全球开发者大会)活动,这是一场面向苹果公司的开发者和供应商的综合性展览及技术交流活动。在本次WWDC 2016上,苹果公司发布了iOS 10和OS X 10.12等众多新产品和新技术…

    other 2023年6月26日
    00
  • Perl使用File::Basename获取文件扩展名的代码

    Perl使用File::Basename获取文件扩展名的代码攻略 在Perl中,可以使用File::Basename模块来获取文件的扩展名。File::Basename模块提供了一些函数,其中fileparse()函数可以用于解析文件路径并获取文件名和扩展名。 下面是使用File::Basename模块获取文件扩展名的代码攻略: 首先,确保你的Perl环境已…

    other 2023年8月5日
    00
合作推广
合作推广
分享本页
返回顶部