js实现多张图片延迟加载效果

当网页中要加载的图片过多时,如果不进行延迟加载,会导致页面加载缓慢,影响用户体验。本文介绍如何使用 JavaScript 实现多张图片延迟加载效果。

  1. 方案一

第一步是在 HTML 中添加图片元素,并设置占位符图片,例如:

<img src="placeholder.gif" data-src="image1.jpg">
<img src="placeholder.gif" data-src="image2.jpg">
<img src="placeholder.gif" data-src="image3.jpg">
<img src="placeholder.gif" data-src="image4.jpg">

这里的占位符图片可以是任意一个小的图片文件,用于占据原本要加载的图片的位置。

第二步是通过 JavaScript 中的 window.onload 事件,监听当网页中所有资源文件都加载完成后,再开始加载图片。其中 querySelectorAll 方法可以选取所有带有 data-src 属性的图片元素,并将图片的 src 属性设置为对应的 data-src 属性值,例如:

window.onload = function() {
  var images = document.querySelectorAll('img[data-src]');
  Array.prototype.forEach.call(images, function(image) {
    image.setAttribute('src', image.getAttribute('data-src'));
  });
};

这里采用原生 JavaScript 的 Array.prototype.forEach.call 方法,是因为 images 是一个类数组对象。

  1. 方案二

第一步是与方案一相同,在 HTML 中添加图片元素,并设置占位符图片。

第二步是通过 JavaScript 中的 window.onscroll 事件,监听当用户滚动页面时,判断哪些图片已经进入到了可视区域内。document.documentElement.clientHeight 表示当前窗口可见区域高度,getBoundingClientRect() 方法可以获取元素相对于视口的位置信息,判断条件为元素距离顶部的位置是否小于等于视口可见区域的高度。代码如下:

window.onscroll = function() {
  var images = document.querySelectorAll('img[data-src]');
  Array.prototype.forEach.call(images, function(image) {
    if (image.getBoundingClientRect().top <= document.documentElement.clientHeight) {
      image.setAttribute('src', image.getAttribute('data-src'));
      image.removeAttribute('data-src');
    }
  });
};

这里需要注意,在图片元素加载完成后,需要将其 data-src 属性删除,以避免重复加载。

以上两种方案都可以实现多张图片的延迟加载效果,第一种方案在页面加载完成后一次性加载所有图片,适合图片数量较少的情况;第二种方案则是在用户滚动页面时一张一张地加载图片,适合大量图片需要延迟加载的情况。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现多张图片延迟加载效果 - Python技术站

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

相关文章

  • springboot入门——jpa

    SpringBoot入门——JPA 什么是JPA Java Persistence API(JPA)是Java EE 5标准中的一组API,用于管理Java对象与关系数据库之间的映射关系。通过使用JPA实现ORM(对象关系映射),可以方便地将Java对象持久化到关系数据库中,并支持查询、更新等操作。 SpringBoot中的JPA SpringBoot是一个…

    其他 2023年3月28日
    00
  • mongodb的批量查询条件进行批量更新数据

    以下是“MongoDB的批量查询条件进行批量更新数据”的完整攻略: MongoDB的批量查询条件进行批量更新数据 在MongoDB中,您可以使用updateMany”函数批量更新符合条件的文档。以下是使用MongoDB进行批量更新的步骤: 准备查询条件。 在批更新之前,您需要准备一个查询条件。以下是一个示例: javascript var query = {…

    other 2023年5月7日
    00
  • c语言++放在前面和后面的区别分析

    C语言++放在前面和后面的区别分析 在C语言中,++操作符用于递增一个变量的值。然而,将++操作符放在变量的前面和后面会导致不同的结果。本文将详细讲解这两种用法的区别,并提供示例说明。 1. ++放在前面 当++操作符放在变量的前面时,它会先递增变量的值,然后返回递增后的值。这种用法被称为前缀递增。 示例代码: int a = 5; int b = ++a;…

    other 2023年8月5日
    00
  • ES6 关键字 let 和 ES5 及关键字 var 的区别解析

    ES6 关键字 let 和 ES5 及关键字 var 的区别解析 1. 声明和作用域 在ES5中,使用var关键字声明变量,而在ES6中,可以使用let关键字声明变量。 使用var声明的变量具有函数作用域,而使用let声明的变量具有块级作用域。 示例1: // ES5 function example1() { if (true) { var x = 5; …

    other 2023年8月21日
    00
  • Kotlin协程概念原理与使用万字梳理

    Kotlin协程概念原理与使用 什么是协程 协程是一种轻量级的线程,它可以在一个线程中同时执行多个任务,但是并不会阻塞线程。协程可以在代码中看起来像是普通的顺序执行的代码,但是可以在其中插入暂停和唤醒其他协程的代码。 协程与线程的区别 协程和线程都是并发执行的工具,但是它们之间有几个关键的区别: 协程是在应用程序内部实现的,而线程是由操作系统实现的。 协程更…

    other 2023年6月27日
    00
  • Spring Boot分离配置文件的多种方式总结

    下面是Spring Boot分离配置文件的多种方式总结的详细攻略: 一、什么是Spring Boot分离配置文件? Spring Boot项目开发中,会有很多需要配置的参数和信息,如数据库的连接信息、端口号、日志级别等等。这些配置信息会在项目启动时进行加载,而在传统的开发中,这些配置信息通常放在一个名为application.properties的配置文件中…

    other 2023年6月25日
    00
  • 高频率Vue面试题汇总以及答案

    高频率Vue面试题汇总以及答案攻略 1. Vue基础知识 问题1:Vue是什么?它有哪些特点? 答案:Vue是一种用于构建用户界面的渐进式JavaScript框架。它具有以下特点:- 响应式数据绑定:Vue使用双向绑定机制,当数据发生变化时,视图会自动更新。- 组件化开发:Vue允许将页面拆分为多个可复用的组件,提高代码的可维护性和复用性。- 虚拟DOM:V…

    other 2023年9月6日
    00
  • mac电脑系统截图名日期后缀去除方法

    Mac电脑系统截图名日期后缀去除方法攻略 在Mac电脑系统中,截图默认会在文件名中包含日期后缀,例如\”截图 2023-08-05 下午3.30.45.png\”。如果你想去除这个日期后缀,可以按照以下步骤进行操作: 步骤一:打开终端 终端是Mac系统中的命令行工具,可以通过以下方式打开: 点击屏幕左上角的\”Spotlight\”(放大镜)图标。 输入\”…

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