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日

相关文章

  • js 数组去重的四种实用方法

    下面是“js 数组去重的四种实用方法”的完整攻略: 一、使用 Set 数据结构 ES6 中提供了 Set 数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。我们可以利用 Set 数据结构去重。 示例代码如下: let arr = [1, 2, 3, 2, 1]; let set = new Set(arr); //set {1, 2, 3} le…

    other 2023年6月25日
    00
  • asp 验证用户名是否包含有非常字符的函数

    要验证用户名是否包含非常字符,我们需要编写一个 ASP 函数来达到目的。下面是一份示例代码: Function IsValidUserName(username) Dim pattern pattern = "^[a-zA-Z0-9_]+$" Dim regEx Set regEx = New RegExp regEx.Pattern =…

    other 2023年6月27日
    00
  • js中哈希表的几种用法总结

    JS中哈希表的几种用法总结 哈希表(Hash Table)是一种基于键值对(key-value)的数据结构,可以充分利用计算机高速的特性,在 O(1) 的时间复杂度下完成数据的查找、插入、删除等操作。在 JavaScript 中,我们可以使用对象(object)或 Map 类来实现哈希表,下面是它们几种用法总结。 1. 以对象实现哈希表 1.1 创建一个空对…

    其他 2023年3月28日
    00
  • 如何跟踪IP地址找出某个地址范围内哪些没有被使用

    如何跟踪IP地址找出某个地址范围内哪些没有被使用的完整攻略 跟踪IP地址并找出某个地址范围内哪些没有被使用的过程可以通过以下步骤完成: 步骤1:确定地址范围 首先,确定你要跟踪的地址范围。IP地址通常由四个数字组成,每个数字的取值范围是0到255。例如,一个常见的地址范围是192.168.0.1到192.168.0.255。 步骤2:使用ping命令检查IP…

    other 2023年7月31日
    00
  • 【go】go语言的%d %p %v等占位符的使用

    在Go语言中,占位符是一种用于格式化输出的特殊字符。占位符可以在输出时被替换为实际的值,以便更好地控制输出的格式和内容。常见的占位符包括%d、%、%f、%p、%v等。 以下是Go语言中常见占位符的使用方法: %d:用于输出整数类型的,例如int、int8、int16、int32、int64等。示例: num := 123 fmt.Printf("n…

    other 2023年5月8日
    00
  • microsoft office2016怎么自定义设置标题栏主题?

    自定义设置标题栏主题,是指在Microsoft Office 2016软件中,用户可以根据自己的偏好,自定义设置标题栏的颜色和风格。下面是设置标题栏主题的完整攻略: 第一步:打开Microsoft Office 2016软件 首先需要打开Microsoft Office 2016软件,比如Word、Excel、PowerPoint等。选择任何一个软件,因为设…

    other 2023年6月25日
    00
  • php中的静态变量的基本用法

    PHP中的静态变量的基本用法 在PHP中,静态变量是一种特殊类型的变量,它们在函数调用之间保持其值不变。静态变量在函数内部声明,但在函数调用之间保持其值。 声明和使用静态变量 要声明一个静态变量,可以使用static关键字。以下是声明和使用静态变量的基本语法: function myFunction() { static $count = 0; $count…

    other 2023年8月9日
    00
  • Java线程生命周期图文详细讲解

    Java线程生命周期图文详细讲解 Java线程生命周期描述了线程从创建到结束的整个过程。当一个线程进入到Java虚拟机时,它便处于创建状态,随着线程在Java虚拟机上下文中运行,大部分时间是处于就绪状态。线程启动后,它可以进入运行状态,但在某些情况下线程可能会返回到就绪状态,如当它失去执行权或等待某些资源时。最终,线程运行完成并进入终止状态。 Java线程生…

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