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

yizhihongxing

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日

相关文章

  • tmp是什么文件

    首先,我们需要理解 tmp(临时文件)是什么。tmp文件(或临时文件)是在一些程序运行时创建的,用于存储计算结果、中间结果或某些数据,通常在程序完成后会被删除。临时文件是用于临时存储数据的文件,在不需要这些数据或者这些数据过期需要更新的时候可以删除或者清空。 当一个程序使用了临时文件,但没有将其删除时,这些临时文件可能会占用计算机的存储空间,进而影响操作系统…

    其他 2023年4月16日
    00
  • ListCtrl接受拖动文件

    ListCtrl接受拖动文件 在很多GUI程序中,我们经常需要做到拖动文件到程序窗口中,以实现文件的打开或其他操作。本文将介绍如何在Python中使用wxPython开发GUI程序,在ListCtrl控件上实现拖动文件的功能。 准备工作 首先,我们需要在程序中导入wxPython的库文件。在Python中,可以使用pip进行安装,安装方式如下: pip in…

    其他 2023年3月28日
    00
  • 深入浅出学习AQS组件

    深入浅出学习AQS组件攻略 什么是AQS AQS (AbstractQueuedSynchronizer) 是 Java 并发包提供的一个用于构建锁和同步器的基础框架,是Java并发编程中重要的底层实现。 AQS的设计思想是对java.util.concurrent包所有同步器的公共行为进行抽象和封装,以便于在实现具体同步器(如ReentrantLock、S…

    other 2023年6月27日
    00
  • win7下如何删除多余选项的右键新建菜单项

    下面是针对win7下如何删除多余选项的右键新建菜单项的攻略。 1. 打开注册表 在开始菜单里搜索 regedit,打开注册表编辑器。 2. 找到新建菜单项 在 HKEY_CLASSES_ROOT 搜索 Directory,点击选中 Directory,展开 shell 节点,找到 New 选项,点击选中。 3. 删除多余菜单项的右键 找到需要删除的菜单项的右…

    other 2023年6月27日
    00
  • Android开发使用Message对象分发必备知识点详解

    一、什么是Message对象 Message是android.os包下的一个类,它代表了一个消息对象,用于在不同的线程之间传递信息,通常用于Handler与Looper之间的通信。在Android开发中,使用Message对象来分发消息非常常见,因此,掌握Message对象的用法和原理至关重要。 二、Message对象的创建和使用 创建Message对象的方…

    other 2023年6月27日
    00
  • C语言运算符及其优先级汇总表口诀

    C语言运算符及其优先级汇总表口诀 1. 算术运算符 运算符 描述 示例 + 加 a + b – 减 a – b * 乘 a * b / 除 a / b % 取余(取模) a % b ++ 自增 a++ — 自减 a– 2. 关系运算符 运算符 描述 示例 == 等于 a == b != 不等于 a != b > 大于 a > b < 小…

    other 2023年6月28日
    00
  • 关于opengl:在vmware(debianx64)中 glxgears的作用

    OpenGL是一种跨平台的图形库,它可以用于创建高性能的3D图形应用程序。在Linux系统中,可以使用glxgears命令来测试OpenGL的性能。glxgears是一个简单的OpenGL程序,它会显示一个旋转的齿轮,并且会在窗口标题栏上显示帧率。在VMware虚机中运行glxgears可以测试虚拟机的OpenGL性能。 以下是关于在VMware(Debia…

    other 2023年5月7日
    00
  • win10开发者套件Visual Studio 2016预览版2发布下载

    Win10开发者套件Visual Studio 2016预览版2发布下载攻略 前言 本文将介绍Win10开发者套件Visual Studio 2016预览版2的下载、安装和使用方法,并提供两条示例说明,供开发者参考。 步骤一:下载Visual Studio 2016预览版2 首先,你需要前往Microsoft官方网站下载Visual Studio 2016预…

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