JS实现非首屏图片延迟加载的示例

JS实现非首屏图片延迟加载可以提高网站的性能,避免一次性加载全部图片对网站造成的压力,下面详细介绍实现的攻略:

1. 了解非首屏图片延迟加载

首先需要了解什么是非首屏图片延迟加载,它的原理是在网站的加载过程中,只加载当前屏幕所需展示的图片,等到用户滚动到相应位置时再加载相应的图片。这样做可以减少首屏加载时间,提高网站加载速度。

2. 实现延迟加载的JS代码

为了实现延迟加载,可以使用以下的JS代码:

function lazyLoad() {
  let images = document.querySelectorAll('img[data-src]');
  let len = images.length;
  for (let i = 0; i < len; i++) {
    let rect = images[i].getBoundingClientRect();
    if (rect.bottom >= 0 && rect.top < document.documentElement.clientHeight) {
      if (images[i].getAttribute('src') !== images[i].getAttribute('data-src')) {
        images[i].src = images[i].getAttribute('data-src');
      }
      images[i].removeAttribute('data-src');
    }
  }
}

window.addEventListener('scroll', lazyLoad);

这段代码使用了getBoundingClientRect()方法获取元素距离屏幕顶部和底部的距离,判断是否在屏幕范围内。同时使用了data-src属性来保存图片真实地址,避免在加载过程中首先加载了placeholder图片或其他小图,减少请求数据,提高性能。最后添加了scroll事件,实现滚动延迟加载。

3. 使用示例

下面提供2个使用示例:

示例1

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Lazy Load</title>
  <style>
    img {
      width: 300px;
      height: auto;
      margin: 20px;
    }

    .box {
      height: 1500px;
    }
  </style>
</head>
<body>
  <div class="box">
    <img data-src="https://picsum.photos/400/600?random=1">
    <img data-src="https://picsum.photos/400/600?random=2">
    <img data-src="https://picsum.photos/400/600?random=3">
    <img data-src="https://picsum.photos/400/600?random=4">
    <img data-src="https://picsum.photos/400/600?random=5">
    <img data-src="https://picsum.photos/400/600?random=6">
    <img data-src="https://picsum.photos/400/600?random=7">
    <img data-src="https://picsum.photos/400/600?random=8">
  </div>
  <script>
    function lazyLoad() {
      let images = document.querySelectorAll('img[data-src]');
      let len = images.length;
      for (let i = 0; i < len; i++) {
        let rect = images[i].getBoundingClientRect();
        if (rect.bottom >= 0 && rect.top < document.documentElement.clientHeight) {
          if (images[i].getAttribute('src') !== images[i].getAttribute('data-src')) {
            images[i].src = images[i].getAttribute('data-src');
          }
          images[i].removeAttribute('data-src');
        }
      }
    }

    window.addEventListener('scroll', lazyLoad);
  </script>
</body>
</html>

在本示例中,页面中一共有8张图片,但一开始仅加载了placeholder图片,在滚动页面的时候才会去加载真实图片。这样可以避免在页面加载过程中一次性请求所有图片,减轻服务器负担,提高网站性能。

示例2

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Lazy Load</title>
  <style>
    img {
      width: 300px;
      height: auto;
      margin: 20px;
    }

    .box {
      height: 1500px;
    }
  </style>
  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
  <div class="box">
    <img data-src="https://picsum.photos/400/600?random=1">
    <img data-src="https://picsum.photos/400/600?random=2">
    <img data-src="https://picsum.photos/400/600?random=3">
    <img data-src="https://picsum.photos/400/600?random=4">
    <img data-src="https://picsum.photos/400/600?random=5">
    <img data-src="https://picsum.photos/400/600?random=6">
    <img data-src="https://picsum.photos/400/600?random=7">
    <img data-src="https://picsum.photos/400/600?random=8">
  </div>
  <script>
    function lazyLoad() {
      let images = document.querySelectorAll('img[data-src]');
      let len = images.length;
      for (let i = 0; i < len; i++) {
        let rect = images[i].getBoundingClientRect();
        if (rect.bottom >= 0 && rect.top < document.documentElement.clientHeight) {
          if (images[i].getAttribute('src') !== images[i].getAttribute('data-src')) {
            images[i].src = images[i].getAttribute('data-src');
          }
          images[i].removeAttribute('data-src');
        }
      }
    }

    $(function() {
      lazyLoad();
      $(window).scroll(function() {
        lazyLoad();      
      });
    });
  </script>
</body>
</html>

本示例中使用了jQuery库,主要是为了方便实现懒加载的效果。原理与前示例相同,区别在于使用了$(document).ready()函数或$()函数,以确保在文档结构出现后再执行JS代码,防止因为JS代码在DOM元素还未出现时运行造成的错误。同时添加了scroll事件,实现滚动延迟加载。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现非首屏图片延迟加载的示例 - Python技术站

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

相关文章

  • Linux运维基础系统磁盘管理教程

    Linux运维基础系统磁盘管理教程 磁盘分区 查看磁盘信息 在Linux系统下,你可以使用以下命令查看磁盘信息: fdisk -l 该命令将列出所有识别的磁盘和磁盘分区的信息,例如磁盘大小、分区数量、分区格式等。 分区工具 在Linux系统下,你可以使用以下工具对磁盘进行分区: fdisk cfdisk parted 这里我们以fdisk为例,使用以下命令进…

    other 2023年6月27日
    00
  • golang的http库使用代理

    当然,我很乐意为您提供有关“Golang的HTTP库使用代理”的完整攻略。以下是详细的步骤和两个示例: 1 使用代理 在Golang中,可以使用HTTP库来发送HTTP请求。如果需要使用代理服务器发送请求,则可以在HTTP客户端中设置代理服务器的地址和端口号。 2 示例 以下是两个使用代理的示例: 2.1 使用HTTP代理 package main impo…

    other 2023年5月6日
    00
  • android开发学习——消息队列

    Android开发学习——消息队列 消息队列是Android中常用的一种异步通信机制,具有轻量、高效、解耦等优点,可用于在多线程间发送消息并交换数据。 消息队列的应用场景 在Android开发中,消息队列使用广泛,主要包括以下几个方面: 在UI线程中更新UI控件:在子线程中更新UI控件是非法的,此时可以通过Message和Handler机制发送消息给UI线程…

    其他 2023年3月28日
    00
  • 电脑老是重启怎么回事?电脑重启的原因及解决方法

    电脑老是重启怎么回事? 电脑重启有时是系统软件故障引起的,有时是硬件问题引起的。了解电脑重启的原因是寻找合适的解决办法的前提。下面我们来详细讲解电脑重启的原因及解决方法。 电脑重启的原因 电脑重启的原因有很多种,下面介绍几种常见的原因: 1. 系统软件故障 电脑重启的原因有可能是系统文件损坏、注册表损坏或者系统缺少组件。可以通过系统修复工具进行修复,如使用系…

    other 2023年6月26日
    00
  • 农业银行总是提示安装安全控件无法登陆的解决方法

    下面是针对“农业银行总是提示安装安全控件无法登陆”的解决方法的完整攻略: 问题背景 农业银行是中国大型国有银行之一,在进行网上银行操作时,多数用户会遇到要求安装安全控件的提示,如果安装不成功就无法正常登录进入网上银行。这一情况困扰着很多用户,以下是解决办法的详细说明。 解决方法 方法一:卸载原有的安全控件,重新安装新版控件 在计算机中打开控制面板,找到“已安…

    other 2023年6月27日
    00
  • gitpush强制推送

    以下是git push强制推送的攻略,包含两个示例: 什么是git push强制推送? git push强制推送是一种git命令,它可以将本地分支的更改强制推送到远程分支,覆盖远程分支上的任何更改。这个命令通常用于解决合并冲突或回滚更改等情况。 如何使用git push强制推送? 要使用git push强制推送,您可以按照以下步骤进行操作: 打开终端并导航到…

    other 2023年5月6日
    00
  • pycharm配置文件有什么用? PyCharm导入导出配置文件的技巧

    PyCharm是一种流行的Python集成开发环境(IDE),可以用于开发各种Python项目。PyCharm有一个强大的配置框架,可以让用户对其进行高度定制。在本文中,我们将详细介绍PyCharm配置文件的作用以及如何导入导出配置文件。 PyCharm配置文件的作用 PyCharm配置文件是一组存储在本地计算机中的文件,它们记录了PyCharm的所有设置。…

    other 2023年6月25日
    00
  • 推荐WEB开发者最佳HTML5和CSS3代码生成器

    当今,HTML5和CSS3已经成为了现代WEB开发中不可或缺的基本技术。为了提高开发效率和代码质量,我们可以使用一些HTML5和CSS3代码生成器。以下是推荐WEB开发者最佳HTML5和CSS3代码生成器的完整攻略。 HTML5代码生成器 1. HTML5模板生成器 HTML5模板生成器可以帮助我们快速生成HTML5文档的基本结构。它可以自动生成HTML5的…

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