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日

相关文章

  • 轻松装win10:vmwareworkstation12虚拟机下载

    轻松装win10:vmwareworkstation12虚拟机下载 如果你想试用最新的Windows 10操作系统,但又不想在你的电脑上直接安装它,那么使用虚拟机是一个不错的选择,它可以让你在安全的环境下尝试新的操作系统。VMware Workstation 12就是这样一个强大的虚拟机软件,它可以帮助你轻松地在你的计算机上运行多个虚拟操作系统,包括Wind…

    其他 2023年3月28日
    00
  • java8 集合之Stack详解及实例

    Java8 集合之 Stack 详解及实例 什么是 Stack Stack 是一种基于 LIFO(后进先出)原则的数据结构,它可以通过 push() 向栈顶添加元素,通过 pop() 从栈顶删除元素,并且 peek() 方法可以用来获取栈顶元素但不删除它。 Stack 的实现 在 Java 中,Stack 是由一个 Vector 来实现的。Vector 本来…

    other 2023年6月27日
    00
  • Win10右键菜单中的“播放到设备”怎么删除?

    下面我来详细讲解“Win10右键菜单中的‘播放到设备’怎么删除?”的攻略。 1.了解“播放到设备”右键菜单 “播放到设备”是Win10系统中的一个非常方便的功能,它可以将音频、视频等文件直接投射到设备上进行播放。正常情况下,它会在文件右键菜单中出现。 2.删除“播放到设备”右键菜单 方法一:使用注册表编辑器 打开注册表编辑器。Win10用户可以按下“Win …

    other 2023年6月27日
    00
  • 重新应用默认的安全设置 : 安全配置和分析

    重新应用默认的安全设置通常用于恢复系统的安全设置到默认状态,以移除之前可能被修改或破坏的设置,从而使得系统恢复到安全的状态。 下面是详细说明重新应用默认的安全设置的完整攻略: 1. 打开组策略编辑器 点击开始菜单,在搜索框中输入 gpedit.msc,打开本地组策略编辑器。 2. 导航到安全配置和分析 在组策略编辑器中,依次展开以下结构:计算机配置 -&gt…

    other 2023年6月25日
    00
  • rancher2.0快速入门

    Rancher 2.0 快速入门 Rancher 2.0 是一个开源的容器管理平台,可以简化 Kubernetes 集群的部署和管理。它提供了一个易于使用的 Web 界面,可以创建、管理和监控 Kubernetes 集群。本篇文章将介绍如何快速入门 Rancher 2.0。 前置条件 在开始 Rancher 2.0 的快速入门之前,您需要了解以下概念/技术:…

    其他 2023年3月28日
    00
  • Linux下命令行cURL的10种常见用法示例

    下面我将详细讲解“Linux下命令行cURL的10种常见用法示例”的完整攻略。 Linux下命令行cURL的10种常见用法示例 cURL是一个命令行工具,支持多种协议,用于和服务器交互。下面介绍下cURL的10种常见用法示例。 1. 发送GET请求 curl https://example.com 上述命令将向example.com发送GET请求,服务器返回…

    other 2023年6月26日
    00
  • C++ list-map链表与映射表的简单使用

    C++ list-map链表与映射表的简单使用 在C++编程中,链表与映射表都是常用的数据结构之一,对于常见的数据处理和算法实现难度降低起到了不可忽视的作用。本文将为大家详细讲解C++中list与map的链表与映射表的简单使用方法。 C++ list链表的简单使用 概述 链表是一种常用的数据结构,与数组不同的是,链表中的存储单位是结构体,在每个结构体中有一个…

    other 2023年6月27日
    00
  • 【操作系统】使用BCD工具安装Ubuntu操作系统

    【操作系统】使用 BCD 工具安装 Ubuntu 操作系统 在计算机操作系统的使用中,很多用户都想去尝试使用其他的操作系统,对于 Windows 操作系统用户来说,比较熟悉的可能是 Ubuntu 操作系统,在这里将详细介绍如何使用 BCD 工具来安装 Ubuntu 操作系统。 什么是 BCD 工具 BCD(Boot Configuration Data)工具…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部