前端JS图片懒加载原理方案详解

前端JS图片懒加载原理方案详解

什么是图片懒加载?

图片懒加载指的是在网页的滚动过程中,将未出现在视窗内的图片延迟加载,等到图片即将进入到可视区域时再将其加载。相对于一开始就加载所有图片的方式,图片懒加载能很大程度地减少页面渲染时的负担,节省带宽资源。

为什么需要图片懒加载?

随着富媒体网站的发展,页面上的图片数量越来越多,而把所有图片一开始就加载出来很容易造成页面加载缓慢,用户体验很差。因此,实现图片懒加载不仅可以提升用户体验,也可以提高页面的性能。

实现方式

图片懒加载的实现方式有多种,其中最常用的方式是利用 Javascript 编写实现。

1. 使用懒加载库

目前市面上常用的 js 懒加载库有 Lazyload.jslayzr.js 等。这些库已经考虑了各种情况,使用这些库能够很快速地实现图片懒加载。

Lazyload.js 库中只需要加入以下代码,即可轻松完成图片懒加载:

var lazyload = new LazyLoad({
    elements_selector: ".lazy"
});

2. 自行编写懒加载脚本

自行编写懒加载脚本需要考虑到以下几个问题:

  • 如何获取需要加载的图片
  • 如何判断图片是否进入可视区域
  • 加载成功以后的处理

下面给出一个基于 Intersection Observer API 的懒加载脚本实现。

// 获取所有需要懒加载的img标签
let images = document.querySelectorAll("img[data-src]");

let observer = new IntersectionObserver(function(entries) {
  entries.forEach(function(entry) {
    if (entry.intersectionRatio > 0) {
      // 进入可视区域,进行加载
      entry.target.setAttribute("src", entry.target.getAttribute("data-src"));
      observer.unobserve(entry.target);
    }
  });
});

// 逐个监控每个需要懒加载的img标签
for (let i = 0; i < images.length; i++) {
  observer.observe(images[i]);
}

示例说明

示例1

为了展示示例1,我们先准备一个大量图片的页面,然后编写下面的 HTML 代码:

<div class="gallery">
  <img data-src="image1.jpg" />
  <img data-src="image2.jpg" />
  <img data-src="image3.jpg" />
  <img data-src="image4.jpg" />
  <img data-src="image5.jpg" />
  <img data-src="image6.jpg" />
  <img data-src="image7.jpg" />
  <img data-src="image8.jpg" />
  <img data-src="image9.jpg" />
  <img data-src="image10.jpg" />
</div>

然后引入 Lazyload.js 库,并解析所有的延迟加载图片。

<script src="path/to/Lazyload.js"></script>
<script>
  var lazyload = new LazyLoad({
      elements_selector: ".gallery img"
  });
</script>

示例2

为了展示示例2,我们还是先准备一个大量图片的页面,然后编写下面的 HTML 代码:

<div class="gallery">
  <img data-src="image1.jpg" />
  <img data-src="image2.jpg" />
  <img data-src="image3.jpg" />
  <img data-src="image4.jpg" />
  <img data-src="image5.jpg" />
  <img data-src="image6.jpg" />
  <img data-src="image7.jpg" />
  <img data-src="image8.jpg" />
  <img data-src="image9.jpg" />
  <img data-src="image10.jpg" />
</div>

然后我们编写下面的 JavaScript 代码:

let images = document.querySelectorAll(".gallery img");
let observer = new IntersectionObserver(function(entries) {
  entries.forEach(function(entry) {
    if (entry.intersectionRatio > 0) {
      // 进入可视区域,进行加载
      entry.target.setAttribute("src", entry.target.getAttribute("data-src"));
      observer.unobserve(entry.target);
    }
  });
});

images.forEach(function(image) {
  // 判断并监控每个img元素
  if (image.offsetTop < window.innerHeight) {
    image.setAttribute("src", image.getAttribute("data-src"));
  } else {
    observer.observe(image);
  }
});

我们首先找到所有需要懒加载的img元素,然后通过 Intersection Observer API 来监控每个img元素。对于已经进入可视区域的img元素,直接加载他的src属性;对于那些尚未进入可视区域的img元素,等待浏览器触发相应的scroll事件后再进行加载操作,从而实现图片懒加载功能。

以上是前端JS图片懒加载的原理方案详解,希望对你有所帮助!

阅读剩余 65%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:前端JS图片懒加载原理方案详解 - Python技术站

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

相关文章

  • js中javascript:void(0) 真正含义

    当在 JavaScript 中引用 javascript:void(0) 时,它实际上表示“解除链接”,因为 0 在 JavaScript 中被视为 false,void(0) 就相当于返回 false。因此,它被用作 JS 代码的占位符,以便于在页面上防止跳转或者刷新。 通常情况下,当您单击超链接时,页面会自动加载URL。然而,在某些情况下,您可能不希望页…

    other 2023年6月25日
    00
  • php经验——phpdocphp注释的标准文档(翻译自wiki)

    以下是PHP经验——PHPDoc PHP注释的标准文档的完整攻略,包括两个示例说明。 1. PHPDoc PHP注释 PHPDoc是一种用于为PHP代码生成文档的注释格式。PHPDoc注释可以包含有关函数、类、属性和参数的信息,以及其他有用的信息,如作者、版本和许可证。 2. 标准文档 以下是PHPDoc PHP注释的标准文档: 2.1 函数注释 /** *…

    other 2023年5月9日
    00
  • 记一次vnc远程连接linux问题解决记录(5900端口测试、kde桌…

    记一次VNC远程连接Linux问题解决记录(5900端口测试、KDE桌面环境) 背景 作为一名Linux爱好者,我经常会在家用VNC远程访问公司或家里的Linux机器。最近,我尝试远程连接一台安装KDE桌面环境的Linux机器,但是发现无法连接。在经过一番摸索之后,我找到了解决方法,现在将其分享给大家。 问题描述 我尝试使用VNC Viewer远程连接Lin…

    其他 2023年3月28日
    00
  • c语言知识(1)

    C语言知识(1)攻略 C语言是一种通用的、面向过程的编程语言,广泛应用于系统软件、嵌入式系统、游戏开发等领域。本攻略将介绍C语言的基础知识,包括数据类型、变量、运算符、控制语句等内容,并提供两个示例说明。 数据类型 C语言中的数据类型包括基本数据类型和派生数据类型。基本数据类型包括整型、浮点型、字符型和布尔型,派生数据类型包括数组、指针、结构体和联合体。 以…

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

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

    other 2023年6月25日
    00
  • vue实现录音功能js-audio-recorder带波浪图效果的示例

    当需要在Vue中展示录音并且需要带有波浪效果时,我们可以使用js-audio-recorder这个JavaScript库。下面将详细讲解如何在Vue中使用js-audio-recorder来实现录音功能,并带有波浪图效果的示例。 准备工作 在开始之前,我们需要进行准备工作: 在Vue项目中安装js-audio-recorder npm install js-…

    other 2023年6月20日
    00
  • pc加载更多功能和移动端下拉刷新加载数据

    为了方便阅读,本文将分为两个部分,分别讲解PC端的加载更多功能和移动端的下拉刷新加载数据。 PC加载更多功能 HTML结构 首先,我们需要搭建一个基本的HTML结构,如下所示: <div id="list"> <ul> <!– 列表内容 –> </ul> <div id=&quot…

    other 2023年6月25日
    00
  • Xcode8下iOS10常见报错闪退,字体适配和编译不过的问题及解决方案

    Xcode8下iOS10常见报错、闪退、字体适配和编译不过的问题及解决方案 在使用Xcode8开发iOS10应用时,常常会遇到报错、闪退、字体适配和编译不过的问题。本文将介绍常见的这些问题及其解决方案。 1. 报错和闪退问题 1.1 NSAllowsArbitraryLoads导致的网络请求报错 iOS10引入了新的安全策略,禁止非HTTPS的网络请求,默认…

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