JS中三种实现懒加载的方法!

1.根据滚动条高度显示图片

可以使用如下代码来实现:

HTML部分:

<div id="image-container"><img src="https://via.placeholder.com/500x400" alt="placeholder image">
</div>

JS部分:

window.addEventListener('scroll', function() {var imageContainer = document.getElementById('image-container');var scrollTop = window.pageYOffset || document.documentElement.scrollTop;if (scrollTop > 200) {imageContainer.style.display = 'block';} else {imageContainer.style.display = 'none';}
});

上述代码监听了浏览器窗口的滚动事件,并根据滚动条的高度来控制图片是否显示。当滚动条的高度大于200时,显示图片,否则隐藏图片。可以根据实际需求自行调整滚动条高度的阈值和图片容器的id。

2.根据定时器来实现懒加载图片

懒加载可以通过定时器来实现,具体实现步骤如下:

  1. 获取需要懒加载的元素,可以使用querySelectorAll等方法。

  2. 使用IntersectionObserver API监听元素是否出现在可视区域内,如果出现则加载内容。如果浏览器不支持IntersectionObserver,则可以通过定时器来模拟实现。

  3. 创建一个定时器,在定时器的回调函数中,判断需要懒加载的元素是否出现在可视区域内,如果是,则加载内容,否则继续等待下一次定时器回调。

下面是一个使用定时器实现懒加载的例子:

// 获取所有需要懒加载的图片元素
const images = document.querySelectorAll('img.lazyload');// 定义一个函数,用来判断元素是否在可视区域内
function isInViewport(el) {const rect = el.getBoundingClientRect();return (rect.bottom >= 0 &&rect.right >= 0 &&rect.top <= (window.innerHeight || document.documentElement.clientHeight) &&rect.left <= (window.innerWidth || document.documentElement.clientWidth));
}// 定义一个定时器,每100ms检查一次需要懒加载的图片是否在可视区域内
const timer = setInterval(() => {images.forEach(img => {if (isInViewport(img)) {// 加载图片img.src = img.dataset.src;// 从需要懒加载的列表中移除该元素images.delete(img);}});// 如果所有图片都已经加载完毕,则取消定时器if (images.length === 0) {clearInterval(timer);}
}, 100);

在上面的例子中,我们首先获取所有需要懒加载的图片元素,然后定义了一个isInViewport函数,用来判断元素是否在可视区域内。

接着我们创建了一个定时器,每100ms检查一次需要懒加载的图片是否在可视区域内。如果图片在可视区域内,则加载该图片,然后从需要懒加载的元素列表中移除该图片。如果所有图片都已经加载完毕,则取消定时器。

需要注意的是,该方法只是一种简单的实现方式,实际应用中还需要考虑各种情况,比如多次触发定时器可能会增加浏览器负担,需要根据具体情况来进行调优。

3.实现滑到屏幕底部进行懒加载

可以通过以下步骤实现滑到屏幕底部进行懒加载:

  1. 创建一个包含要懒加载的元素的列表或集合。
  2. 监听窗口的滚动事件。
  3. 在滚动事件处理程序中,检查滚动位置是否达到了屏幕底部。
  4. 如果是,则加载下一批元素。
  5. 每次加载元素时,更新列表或集合中的元素,以保持追加元素的顺序。

以下是一个简单的实现:

// Step 1: 创建包含要懒加载的元素列表
const lazyElements = Array.from(document.querySelectorAll('.lazy'));// Step 2: 监听滚动事件
window.addEventListener('scroll', () => {// Step 3: 检查是否滚动到屏幕底部if (window.innerHeight + window.scrollY >= document.body.offsetHeight) {// Step 4: 加载下一批元素const nextBatch = lazyElements.splice(0, 10); // 加载10个元素nextBatch.forEach(element => {element.src = element.dataset.src; // 设置元素的src属性,触发下载element.classList.remove('lazy'); // 删除.lazy类,避免重复加载});}
});

在这个示例中,我们使用了一个lazy类来标记要懒加载的元素,并将要加载的元素数量设置为10。可以根据需要进行更改。另外,我们假设每个懒加载元素都有一个data-src属性,其中保存了实际要加载的图像的URL。

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

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

相关文章

关系型数据库MySQL及其优化

写在前面 本文看下MySQL的基础内容以及常见的优化方式。 1&#xff1a;MySQL基础内容 1.1&#xff1a;什么是关系型数据库 以二维的数据格式来存储数据的数据库叫做关系型数据库&#xff0c;其中关系包括一对一&#xff0c;一对多&#xff0c;多对多&#xff0c;都通过二位…

商业智能BI,如何区别联机事务处理(OLTP)和联机分析处理(OLAP)

商业智能(Business Intelligence&#xff0c;简称&#xff1a;BI)&#xff0c;又称商业智慧或商务智能&#xff0c;指用现代数据仓库技术、线上分析处理技术、数据挖掘和数据展现技术进行数据分析以实现商业价值。 商业智能BI - 派可数据数据可视化分析平台 定义为下列软件工具…

CAD随机粗糙度表面插件

插件介绍 CAD随机粗糙度表面插件可用于在AutoCAD软件内生成随机高度分布的表面三维实体模型&#xff0c;适用于科研论文绘图、有限元建模、随机地形模拟等方面的应用。 插件可指定的参数有三维模型的长、宽、高&#xff1b;随机粗糙度表面信息中网格尺寸控制模型生成的精细程…

解决idea编辑application.yml文件或properties文件没有提示问题

注意&#xff1a;这里说的没有提示&#xff0c;是针对application.properties和application.yml文件 解决办法&#xff1a;在idea的插件面板中&#xff0c;禁用或卸载 wl Spring Assistant插件即可解决问题。

springboot 使用zookeeper实现分布式锁

一.添加ZooKeeper依赖&#xff1a;在pom.xml文件中添加ZooKeeper客户端的依赖项。例如&#xff0c;可以使用Apache Curator作为ZooKeeper客户端库&#xff1a; <dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</…

做BI领域的ChatGPT,思迈特升级一站式ABI平台

8月8日&#xff0c;以「指标驱动 智能决策」为主题&#xff0c;2023 Smartbi V11系列新品发布会在广州丽思卡尔顿酒店开幕。 ​ 后疫情时代&#xff0c;BI发展趋势的观察与应对 在发布会上&#xff0c;思迈特CEO吴华夫在开场致辞中表示&#xff0c;当前大环境背景下&#xf…

K8S系列文章之 离线安装自动化工具Ansible

参考 文档 离线安装 Ansible - DevOps - dbaselife 一、Ansible简介 Ansible是一款开源的IT配置管理工具&#xff0c;常被IT界的小伙伴们用于自动化的场景&#xff0c;多用在服务部署、配置管理方面。配置文件采用最常见的yaml格式&#xff0c;学习起来也是比较容易&#xff…

【分布式系统】聊聊高性能设计

每个程序员都应该知道的数字 高性能 对于以上的数字&#xff0c;其实每个程序员都应该了解&#xff0c;因为只有了解这些基本的数字&#xff0c;才能知道对于CPU、内存、磁盘、网络之间数据读写的时间。1000ms 1S。毫秒->微秒->纳秒-秒->分钟 为什么高性能如此重要的…

数据结构刷题训练:用栈实现队列(力扣OJ)

目录 前言 1. 题目&#xff1a;用栈实现队列 2. 思路 3. 分析 3.1 定义 “ 队列 ” 3.2 创建队列 3.3 入队 3.4 队头数据 3.5 出队 3.6 判空和销毁 4.题解 总结 前言 栈和队列是数据结构中的两个重要概念&#xff0c;它们在算法和程序设计中都有着广泛的应用。本文将带你深入了…

物联网是下一个风口吗?

随着科技的持续进步&#xff0c;物联网行业正在迅速兴起&#xff0c;展现出巨大的潜力。那么&#xff0c;物联网行业的未来是什么样的呢&#xff1f; 1. 5G技术的广泛应用和普及 随着5G技术的快速发展和商业化推广&#xff0c;物联网行业将迎来一个巨大的飞跃。5G技术的高速传…

kube-prometheus 使用 blackbox-exporter 进行icmp 监控

安装kube-prometheus 后默认在monitoring namespace中有创建 blackbox-exporter deployment。但默认没有icmp的module配置&#xff0c;无法执行ping探测。因为即使有icmp module&#xff0c;默认配置也是无法执行ping探测的&#xff08;这篇文章要解决的就是这个问题&#xff0…

中科亿海微FIFO使用

引言 FPGA&#xff08;现场可编程门阵列&#xff09;是一种可编程逻辑器件&#xff0c;具有灵活性和可重构性&#xff0c;广泛用于数字电路设计和嵌入式系统开发。在FPGA中&#xff0c;FIFO&#xff08;First-In, First-Out&#xff09;是一种常见的存储器结构&#xff0c;用于…

1001 Battle Over Cities - Hard Version (PAT顶级)

总体思路是用并查集来做。vec记录了目前断掉的路&#xff0c;use记录了使用中的路。将断掉的路按照修复费用从小到大排序。 对每一个城市i失守进行讨论&#xff0c;先根据use将其中两端城市进行union&#xff0c;然后计算一下联通块个数。再按序找两个城市不在同一个联通块中的…

Java常用代码块、工具类、常用框架、mysql常用语句模版汇总

Idea常用插件 Build Generator:生成builder模式的代码MybatisX:mapper.xml文件和dao之间关联、映射LombokMaven Helper:分析maven冲突等Json parserJava后台常用框架 springbootspringmvcmybatis -plusmysqlmavenjunitjacksonguavaapache commons utilsnettyswaggerjoda-tim…

【Nginx】Nginx的重定向——location

location 匹配URI location 匹配的规则和优先级&#xff1b;***重点 nginx常用的变量&#xff1b;要求掌握 rewrite 重定向&#xff1b;掌握/理解 location匹配&#xff1a;*** 正则表达式&#xff1a;匹配的是文件内容 常见的正则表达式&#xff1a…

读《Flask Web开发实战》(狼书)笔记 | 第1、2章

前言 2023-8-11 以前对网站开发萌生了想法&#xff0c;又有些急于求成&#xff0c;在B站照着视频敲了一个基于flask的博客系统。但对于程序的代码难免有些囫囵吞枣&#xff0c;存在许多模糊或不太理解的地方&#xff0c;只会照葫芦画瓢。 而当自己想开发一个什么网站的时&…

【云原生】Kubernetes 概述

Kubernetes 概述 1.Kubernetes 简介 Kubernetes 是一个可移植的、可扩展的、用于管理容器化工作负载和服务的开源平台&#xff0c;它简化&#xff08;促进&#xff09;了声明式配置和自动化。它有一个庞大的、快速增长的生态系统。Kubernetes 的服务、支持和工具随处可见。 K…

消息队列kafka及zookeeper机制

一、zookeeper1.1 zookeeper简介1.2 zookeeper工作机制1.3 Zookeeper特点1.4 Zookeeper 数据结构1.5 Zookeeper 应用场景1.5.1 统一命名服务1.5.2 统一配置管理1.5.3 统一集群管理1.5.4 服务器动态上下线1.5.5 软负载均衡 1.6 Zookeeper 选举机制1.6.1 第一次启动选举机制1.6.2…

Jenkins 使用

Jenkins 使用 文章目录 Jenkins 使用一、jenkins 任务执行二、 Jenkins 连接gitee三、Jenkins 部署静态网站 一、jenkins 任务执行 jenkins 创建 job job的名字最好是有意义的 restart_web_backend restart_web_mysql[rootjenkins ~]# ls /var/lib/jenkins/ config.xml …

为什么Tomcat的NIO在读取body时要模拟阻塞?

文章首发地址 Tomcat的NIO完全可以以非阻塞方式处理IO&#xff0c;为什么在读取body部分时要模拟阻塞呢&#xff1f;在Tomcat的NIO读取HTTP请求时&#xff0c;为了保证请求的正确性和可靠性&#xff0c;需要模拟阻塞模式&#xff0c;这是因为servlet规范里定义了ServletInputSt…