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日

相关文章

  • Vue封装Swiper实现图片轮播效果

    这里提供一份完整的攻略,来帮助大家使用Vue框架封装Swiper实现图片轮播效果。 一、准备工作 首先需要在Vue项目中引入Swiper库及其样式,可以通过npm安装或直接引入CDN。 <!– 引入Swiper核心库 –> <script src="https://unpkg.com/swiper/swiper-bundle.…

    other 2023年6月25日
    00
  • matlabr2017b安装及破解(安装详解)

    作为一个AI助手,我不能提供任何非法或侵犯版权的行为。因此,我无法提供Matlab R2017b的破解攻略。但是,我可以提供Matlab R2017b的安装攻略,以帮助您在合法的情况下安装Matlab R2017b。以下是如何安装Matlab R2017b的完整攻略,含两个示例说明。 步骤一:下载Matlab R2017b 访问MathWorks官方网站(h…

    other 2023年5月9日
    00
  • ubuntu查看进程

    ubuntu查看进程 在使用 Ubuntu 的过程中,经常需要查看当前运行的进程情况,以便于监控和管理系统。 下面介绍两种常见的方法来查看 Ubuntu 中的进程。 1. 使用命令行 可以通过在命令行下使用 ps 命令来查看当前运行的进程。 # 查看当前所有进程 ps -ef # 查看指定进程 ps -p [进程号] 其中,-e 参数表示显示所有进程;-f …

    其他 2023年3月28日
    00
  • androidbutton点击效果(按钮背景变色、文字变色)

    androidbutton点击效果(按钮背景变色、文字变色) 在移动应用中,按钮是最常用的交互元素之一,为了使用户更好地感受点击交互的反馈,我们通常会在点击按钮时添加一些特效。本文将介绍如何实现android button点击效果——按钮背景变色、文字变色。 首先,我们需要在xml布局文件中定义button元素,并设置相关属性。 <Button and…

    其他 2023年3月29日
    00
  • rabbitmqstomp连接

    RabbitMQ STOMP连接攻略 RabbitMQ是一个开源的消息代理软件,支持多种消息协议,包括AMQP、MQTT和STOMP等。STOMP(Simple Oriented Messaging Protocol)是一种简单的文本协议,用于在客户端和消息代理之间传输消息。本攻略将介绍如何STOMP协议连接RabbitMQ,包括STOMP协议的基本概念、R…

    other 2023年5月7日
    00
  • zeros()函数——matlab

    zeros()函数——matlab 在 Matlab 中,zeros() 函数返回一个由 0 组成的矩阵或者向量。特别是在创建一个占位矩阵或向量时, zeros() 函数非常有用。 语法 zeros() 函数的语法如下: A = zeros(m,n) A = zeros([m,n]) A = zeros([m,n,p,…]) A = zeros(sz1,…

    其他 2023年3月28日
    00
  • 一步一步跟我学易语言之自定义数据类型

    一步一步跟我学易语言之自定义数据类型 自定义数据类型是基于现有的数据类型创建的一种新的数据类型,它能够更好地满足业务需求。下面将介绍如何在易语言中创建自定义数据类型。 步骤1:声明结构体 结构体是存储复杂数据类型的一种方式,它由多个变量组成,并且这些变量的类型可以不同。声明结构体的语法如下: 类型 结构体名 { 类型1 变量1; 类型2 变量2; … 类…

    other 2023年6月25日
    00
  • 浅入浅出的讲解Spring循环依赖问题

    浅入浅出的讲解Spring循环依赖问题 在Spring应用程序中,依赖注入(Dependency Injection)是一种非常常用的设计模式。通常情况下,我们通过在类的成员变量上使用@Autowired来实现依赖注入。但是,当两个或多个类互相依赖时,就可能发生循环依赖的问题。 什么是循环依赖 循环依赖指的是,当两个或多个类互相依赖时,形成的依赖链呈现出循环…

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