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

以下是详细的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日

相关文章

  • chrome开发者工具-timeline的详细介绍

    Chrome 开发者工具 – Timeline 的详细介绍 Chrome 开发者工具是一款功能强大的 web 开发调试工具,其中 Timeline 是其中的一个非常重要的功能模块。它可以记录网站运行中的各种时间数据,帮助我们分析网站性能问题。接下来我将详细介绍 Chrome 开发者工具 – Timeline 功能模块的使用方法。 如何打开 Timeline …

    other 2023年6月27日
    00
  • 如何最大限度减少线缆设计中的串扰的解决方案

    为了最大限度减少线缆设计中的串扰,我们可以采取以下解决方案: 1. 优化线缆排列和隔离 线缆的排列和隔离是减少串扰的关键。建议尽可能将同类信号的线缆分开,降低它们之间的交叉程度。例如,在一个机房内,可以将电缆、网络线、电话线等分别排列,然后使用屏蔽材料将它们隔开。这样可以有效减少信号之间的交叉干扰,提高整个系统的抗干扰能力。 示例说明: 假如一个机房内需要布…

    other 2023年6月26日
    00
  • C语言:min和max头文件

    C语言:min和max头文件 在C语言中,我们经常需要比较两个数的大小并取得其中的最大值或最小值。虽然可以自行编写函数来实现此功能,但是C语言标准库中提供了min和max头文件,可以更方便地实现这些操作。 min和max头文件的介绍 min和max头文件是C语言标准库中的头文件,它们分别定义了一组宏(macros),可以用于获取两个数中的最小值或最大值。 这…

    其他 2023年3月28日
    00
  • Vue三层嵌套路由的示例代码

    Vue三层嵌套路由的示例代码攻略 在Vue中,我们可以使用Vue Router来实现路由功能。三层嵌套路由是指在一个页面中,有三个层级的路由嵌套关系。下面是一个示例代码,展示了如何实现三层嵌套路由。 首先,我们需要在Vue项目中安装Vue Router。可以使用以下命令进行安装: npm install vue-router 接下来,在项目的入口文件(通常是…

    other 2023年7月28日
    00
  • oracle误drop/update操作后的数据恢复测试

    Oracle误操作数据恢复测试攻略 误操作是数据库管理中常见的问题之一,为了保证数据的完整性和可靠性,进行误操作后的数据恢复测试是非常重要的。以下是Oracle误操作数据恢复测试的完整攻略: 创建测试环境:首先,创建一个与生产环境相似的测试环境,包括数据库实例、表结构和数据。确保测试环境与生产环境一致,以便准确模拟误操作的情况。 备份数据库:在进行误操作之前…

    other 2023年10月18日
    00
  • 判断Linux Shell环境变量是否存在

    判断Linux Shell环境变量是否存在的完整攻略如下: 1. 使用echo命令检测环境变量是否存在 可以使用echo命令来检测环境变量是否存在,具体操作如下: if [ -n "$SHELL" ]; then echo "SHELL exists" else echo "SHELL does not ex…

    other 2023年6月27日
    00
  • Premiere CC 2019图文安装和注册补丁的使用方法

    Premiere CC 2019图文安装和注册补丁的使用方法 一、安装步骤 下载Adobe Premiere CC 2019软件安装包,可前往Adobe官方网站下载或者从其他安全可靠的软件下载网站下载; 双击安装包进入安装向导,按照向导提示完成安装; 安装完成后,双击桌面上的Adobe Premiere CC 2019图标打开软件,就可以开始使用了。 示例:…

    other 2023年6月27日
    00
  • C#取得Web程序和非Web程序的根目录的N种取法总结

    C#取得Web程序和非Web程序的根目录的N种取法总结 在使用C#编写程序时,我们经常需要获取程序的根目录,根据程序是Web程序还是非Web程序,获取根目录的方法也有所不同。下面总结了几种不同情况下获取根目录的方法: 获取Web程序的根目录 方法1:使用HttpContext.Current.Server.MapPath方法 在Web程序中,可以使用Http…

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