JavaScript的懒加载处理

news2024/12/27 11:27:46

在这里插入图片描述

😘博主:小猫娃来啦
😘文章核心:JavaScript的懒加载处理

文章目录

    • 什么是懒加载
    • 实现懒加载的方式
    • js四步法
      • 设置占位图
      • 监听滚动事件
      • 加载图片
      • 触发加载函数

什么是懒加载

懒加载(Lazy Loading)是一种优化技术,它可以延迟加载某些资源,直到它们真正需要被使用的时候才进行加载。这种技术可以提升应用程序或网站的性能,减少初始加载时间。


实现懒加载的方式

实现懒加载的方法一般分为两种:基于 Intersection Observer API 的懒加载和基于滚动事件的懒加载。
Intersection Observer API 是一个新的浏览器 API,它可以异步观察目标元素与其祖先元素或顶级文档视窗的交集情况。我们可以使用它来实现懒加载。

下面是一种实现懒加载的常见方式(Intersection Observer API):

  1. 在HTML中标记需要延迟加载的元素,通常是图片、视频等资源。可以使用data属性或class来添加标记。

示例:

<img class="lazy" data-src="image.jpg" alt="Lazy-loaded Image">
  1. 使用JavaScript监听页面滚动事件或其他触发事件,检查需要加载的元素是否进入了可视区域。

使用Intersection Observer API:

// 观察器选项
const options = {
  root: null, // 默认为视窗
  rootMargin: '0px',
  threshold: 0.5 // 当目标元素50%可见时触发加载
};

const handleIntersection = (entries,) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
 // 加载目标元素
      const target = entry.target;
      target.src = target.dataset.src;
      observer.unobserve(target);
    }
  });
};

// 创建一个观察器实例
const observer = new IntersectionObserver(handleIntersection, options);

// 找到所有需要懒加载的元素并进行观察
const lazyElements = document.querySelectorAll('.lazy');
lazyElements.forEach(element => {
  observer.observe(element);
});

我们通过Intersection Observer API来监听目标元素是否进入可视区域,并在元素可见时将data-src属性的值赋给src属性来加载资源。观察器选项可以根据需求进行调整。

或者说,你也可以根据一定的步骤去实现


js四步法

设置占位图

在HTML中,将需要懒加载的图片的src属性设置为一个占位图,可以是一张小尺寸、模糊或单色的图片,表示图片正在加载。

<img src="placeholder.jpg" data-src="image-to-lazy-load.jpg" alt="Lazy-loaded Image">

监听滚动事件

使用JavaScript监听页面的滚动事件,当滚动事件触发时,判断懒加载图片是否进入了可视区域。

window.addEventListener('scroll', function() {
  // 判断懒加载图片是否进入可视区域
  // 如果图片进入可视区域,则触发加载图片的函数
});

加载图片

当懒加载图片进入可视区域时,将占位图的data-src属性值赋给src属性,从而触发加载图片。

function lazyLoad() {
  const lazyImages = document.querySelectorAll('img[data-src]');
  lazyImages.forEach(function(img) {
    if (isInViewport(img)) {
      img.src = img.dataset.src;
      img.removeAttribute('data-src');
    }
  });
}

function isInViewport(element) {
  var rect = element.getBoundingClientRect();
  return (
    rect.bottom >= 0 &&
    rect.right >= 0 &&
    rect.top <= (window.innerHeight || document.documentElement.clientHeight) &&
    rect.left <= (window.innerWidth || document.documentElement.clientWidth)
  );
}

触发加载函数

在滚动事件中触发加载函数,实现懒加载的效果。

window.addEventListener('scroll', function() {
  lazyLoad();
});

这也是一种实现懒加载的方式,但需要注意的是,在实际使用中可能需要根据具体情况进行适当的调整和优化,例如添加防抖和节流机制,处理图片加载失败等情况。同时,还可以使用现有的懒加载库来简化代码并实现更多功能。

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1085003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GitLab 502问题解决方案

由于最近 gitlab 切换到另一台服务器上部署的 gitlab 后&#xff0c;经常出现 502。平时重启 gitlab 后都能解决&#xff0c;今天突然重启多次后都还是 502&#xff08;重启日志是正常的&#xff09;&#xff0c;遂通过 gitlab-ctl tail 查看日志进行排查。 gitlab-ctl tail通…

《进化优化》第3章 遗传算法

文章目录 3.1 遗传学的历史3.2 遗传学3.3 遗传学的历史3.4 一个简单的二进制遗传算法3.4.1 用于机器人设计的遗传算法3.4.2 选择与交叉3.4.3 变异3.4.5 遗传算法参数调试 3.5 简单的连续遗传算法 遗传算法模仿自然选择来解决优化问题。 为研究遗传算法&#xff0c;得遵守自然选…

微软10月补丁 | 修复103个漏洞,包括2个零日漏洞,13个严重漏洞

近日&#xff0c;微软发布了2023年10月的补丁更新&#xff0c;解决了其软件中的103个漏洞。 在这103个漏洞中&#xff0c;有13个的评级为严重漏洞&#xff0c;90个被评为重要漏洞。自9月12日以来&#xff0c;谷歌已经解决了基于chrome的Edge浏览器的18个安全漏洞。 这两个零日…

ATFX汇市:美国9月CPI数据来袭,机构预期年率增速将继续回落

ATFX汇市&#xff1a;今日20:30&#xff0c;美国劳工部将公布9月未季调CPI年率增速&#xff0c;前值为3.7%&#xff0c;预期值3.6%&#xff1b;9月未季调核心CPI年率&#xff0c;同一时间公布&#xff0c;前值为4.3%&#xff0c;预期值4.1%。无论是名义CPI增速还是核心CPI增速&…

深入理解强化学习——标准强化学习和深度强化学习

分类目录&#xff1a;《深入理解强化学习》总目录 强化学习的历史 早期的强化学习&#xff0c;我们称其为标准强化学习。最近业界把强化学习与深度学习结合起来&#xff0c;就形成了深度强化学习&#xff08;Deep ReinforcemetLearning&#xff09;。因此&#xff0c;深度强化…

基于YOLO算法的单目相机2D测量(工件尺寸和物体尺寸)三

1.简介 1.1 2D测量技术 基于单目相机的2D测量技术在许多领域中具有重要的背景和意义。 工业制造&#xff1a;在工业制造过程中&#xff0c;精确测量是确保产品质量和一致性的关键。基于单目相机的2D测量技术可以用于检测和测量零件尺寸、位置、形状等参数&#xff0c;进而实…

腾讯云国际站-阿里云OSS如何迁移到腾讯云COS?腾讯云cos迁移教程

下面小编将介绍当源对象存储部署在阿里云国际版OSS 时&#xff0c;如何配置全托管迁移任务和半托管迁移任务&#xff0c;实现顺利迁移数据至腾讯云国际版COS。 准备工作 阿里云对象存储 OSS 创建 RAM 子账号并授予相关权限&#xff1a; 登录 RAM 控制台。选择人员管理 > …

吃瓜神奇!企查查、天眼查、天眼销,到底哪家强?

最近&#xff0c;我发现很多人在讨论查企业信息的工具&#xff0c;什么企查查、天眼查、天眼销等&#xff0c;到底哪家强呢&#xff1f; 首先&#xff0c;我们来简单了解一下这些工具。企查查是一款可以帮助用户查询企业信息的工具&#xff0c;通过输入关键词&#xff0c;可以搜…

VPN基础

1.VPN简介 VPN即虚拟专用网&#xff0c;泛指通过VPN技术在公用网络上构建的虚拟专用网络。VPN用户在此虚拟网络中传输私网流量&#xff0c;在不改变网络现状的情况下实现安全、可靠的连接。 专用&#xff1a;VPN网络是专门供VPN用户使用的网络&#xff0c;对于VPN用户&#xf…

Redis魔法:点燃分布式锁的奇妙实现

分布式锁是一种用于在分布式系统中控制对共享资源的访问的锁。它与传统的单机锁不同&#xff0c;因为它需要在多个节点之间协调以确保互斥访问。 本文将介绍什么是分布式锁&#xff0c;以及使用Redis实现分布式锁的几种方案。 一、前言 了解分布式锁之前&#xff0c;需要先了…

太顶了!文心大模型落地文旅行业不仅能业生成潮玩、还可补文物残卷!

10月11日&#xff0c;文化和旅游部公布了2023年文化和旅游数字化创新示范十佳案例和优秀案例。百度文心大模型创新文化产品生产方式入选十佳案例&#xff0c;也是唯一一个入选的大模型应用案例。文心大模型获奖类型为运用数字化工具助力艺术创作生产&#xff0c;促进文化机构数…

产品升级!全球尺度下原核基因组关键基因共进化无标题

微生物是群落型的生存方式&#xff0c;高通量测序时代到来后&#xff0c;掀起了针对微生物群落整体研究的高潮&#xff0c;比如基于功能基因/16S/ITS/扩增子、宏基因组等进行群落多样性分析。但是&#xff0c;我们基于分离培养等方法获得单菌落&#xff0c;针对单菌开展基因组、…

xxx.ko 驱动模块加载报错 “unknown symbol in module or invalid parameter”

一、问题 在对单独驱动模块进行测试时&#xff0c;我们要进行动态编译&#xff0c;生成对应驱动的.ko模块。然后进行手动加载和卸载。但是在进行驱动模块加载时遇到了unknown symbol in module or invalid parameter问题&#xff0c;对此进行排查解决。 二、解决 首先进行dmes…

IEJoin: 提高 Databend range join 性能

作者&#xff1a;王旭东 Databend 研发工程师 xudong963 (xudong.w) GitHub IEJoin 算法可以高效的处理时序场景中的 Range(ASOF) Join。 Join conditions Equi condition 在 下面 SQL 中 SELECT * FROM employee JOIN department ON employee.DepartmentID department.D…

Spring 方法升级 在hellospring接口里面

1.现在实现类Hellojava写一个构造方法 2.去配置文件那里 3.测试 就留下第一步 看下面测试情况 我们在这里并没有去getbean它 但是我们new了 那就说明 只要我们newl它该对象就已经创建好了

如何把电脑上的游戏串流助手设置为开机自启动?

注意&#xff1a;想要直接将 游戏串流助手 扔进“启动”文件夹里面&#xff0c;是没有用的&#xff0c;重启电脑根本打不开游戏串流助手&#xff01; 步骤一&#xff1a;每次双击 游戏串流助手之后&#xff0c;都会弹出这个用户账户控制&#xff0c;我们第一步就是要把这个禁用…

uniapp小程序实现绘制内容,生成海报并保存截图(Painter和Canvas两种方式举例)

一、Painter方法 Painter插件传送门 1.下载资源包 2.将资源包的如下部分 3.使用页面引入组件 ui样式 <paintercustomStyle=margin-left: 40rpx; height: 1000rpx;palette="{{palette}}"bind:imgOK="onImgOK"/>data 中数据(绘制内容,替换区域) pai…

深圳想要开低佣金开户?怎么开股票账户佣金最低?

深圳想要开低佣金开户&#xff1f;怎么开股票账户佣金最低&#xff1f; 炒股开户的方法一般有两种&#xff1a; 在线开户&#xff1a;通过证券公司的官网或手机APP进行在线开户。具体流程一般为填写个人信息、进行身份认证、签署相关协议并上传相关材料&#xff0c;最后等待审…

【C语言】文件的操作与文件函数的使用(详细讲解)

前言&#xff1a;我们在学习C语言的时候会发现在编写一个程序的时候&#xff0c;数据是存在内存当中的&#xff0c;而当我们退出这个程序的时候会发现这个数据不复存在了&#xff0c;因此我们可以通过文件把数据记录下来&#xff0c;使用文件我们可以将数据直接存放在电脑的硬盘…

Pytorch深度学习—FashionMNIST数据集训练

文章目录 FashionMNIST数据集需求库导入、数据迭代器生成设备选择样例图片展示日志写入评估—计数器模型构建训练函数整体代码训练过程日志 FashionMNIST数据集 FashionMNIST&#xff08;时尚 MNIST&#xff09;是一个用于图像分类的数据集&#xff0c;旨在替代传统的手写数字…