常见图片懒加载方式有哪些
1.使用同一个链接,如何实现PC打开是web 应用、手机打开是一个H5应用2.如何保证用户的使用体验3.如何解决页面请求接口大规模并发问题4.设计一套全站请求耗时统计工具5.大文件上传6.h5如何解决移动端适配问题7.实现站点一键换肤功能实现方式有哪些8.如何实现网页加载进度条
9.常见图片懒加载方式有哪些
10.cookie构成部分有哪些11.DNS协议了解多少12.函数式编程了解多少13.一直在window上面挂东西是否有什么风险14.小程序为什么会有两个线程15.如何通过设置失效时间清除本地存储的数据?16.如果不使用脚手架,如果用webpack构建一个自己的react应用17.用 nodejs 实现一个命令行工具,统计输入目录下面指定代码的行数18.package.json 里面 sideEffects 属性的作用19.script 标签上有那些属性20.SPA 中使用 hash 路由时作用和意义21.用户访问页面白屏了,原因是啥如何排查?22.[代码实现]S 中如何实现大对象深度对比23.JavaScript 中处理 100 万数据时确保性能和流畅度的几种方法24.<script> 标签放在 HTML 文档的 <body> 内底部25.虚拟滚动加加载的原理和实现思路26.ts二刷27.promise面试题28.命令行创建 uni-app 项目29.uniapp+v3的小知识点30.ts文件忽略校验31.['',''].join(" ").trim()32.自定义导航栏交互(导航栏左上角按钮+滚动动画效果)33.可视化点击x轴标签实现标签文字切换34.运行vue -V的时候vue : 无法加载文件 C:\Users\jiaho\AppData\Roaming\npm\vue.ps1,因为在此系统上禁止运行脚本35.uniapp+vue2实现下载相关-
原生JavaScript实现懒加载
- 原理:利用浏览器的可视区域(
getBoundingClientRect
函数可以获取元素相对于视窗的位置)来判断图片是否进入可视区域。当图片进入可视区域时,将图片的src
属性设置为真实的图片地址,从而实现懒加载。 - 实现步骤:
- 首先,将图片的
src
属性设置为一个占位符(通常是一个小尺寸的默认图片或者一个简单的加载提示图标),同时将真实的图片地址存储在data - src
(自定义属性)中。例如:
<img src="placeholder.jpg" data - src="real - picture.jpg" alt="Picture">
- 然后,在JavaScript中获取所有需要懒加载的图片元素,并添加滚动事件监听器。当滚动事件发生时,遍历所有图片,判断它们是否进入可视区域。例如:
const lazyImages = document.querySelectorAll('img[data - src]'); const lazyLoad = function () { lazyImages.forEach((img) => { if (img.getBoundingClientRect().top <= window.innerHeight && img.getBoundingClientRect().bottom >= 0) { img.src = img.dataset.src; img.removeAttribute('data - src'); } }); }; window.addEventListener('scroll', lazyLoad); window.addEventListener('load', lazyLoad);
- 首先,将图片的
- 优点:不需要引入外部库,纯原生JavaScript实现,对代码量较小的项目比较友好,易于理解和定制。
- 缺点:需要手动处理滚动等事件,代码逻辑相对复杂一些;在性能上可能不如一些经过优化的第三方库;如果页面中有大量图片,可能会对性能产生一定影响。
- 原理:利用浏览器的可视区域(
-
使用Intersection Observer API实现懒加载
- 原理:Intersection Observer API是浏览器提供的一种异步观察目标元素与祖先元素或视窗(viewport)交叉状态的方法。通过这个API,可以轻松地观察图片元素是否进入可视区域,当交叉比例达到一定阈值时,触发回调函数进行懒加载。
- 实现步骤:
- 同样,先将图片的
src
属性设置为占位符,真实图片地址放在data - src
属性中。例如:
<img src="placeholder.jpg" data - src="real - picture.jpg" alt="Picture">
- 然后,在JavaScript中使用Intersection Observer API。例如:
const lazyImages = document.querySelectorAll('img[data - src]'); const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { const img = entry.target; img.src = img.dataset.src; img.removeAttribute('data - src'); observer.unobserve(img); } }); }); lazyImages.forEach((img) => { observer.observe(img); });
- 同样,先将图片的
- 优点:性能较好,因为它是浏览器原生支持的异步API,不需要频繁地检查元素是否进入可视区域,减少了浏览器的开销;代码相对简洁,使用方便。
- 缺点:兼容性方面,一些旧版本的浏览器可能不支持Intersection Observer API,需要考虑兼容性处理,如使用
@babel/polyfill
或者提供备用的懒加载方案。
-
利用第三方库实现懒加载(以LazyLoad.js为例)
- 原理:第三方懒加载库通常封装了复杂的判断和加载逻辑,提供简单易用的接口。以LazyLoad.js为例,它会自动检测页面中的图片元素,根据其配置的参数(如可视区域的阈值、加载动画等)来实现懒加载。
- 实现步骤:
- 首先,引入LazyLoad.js库。可以通过下载库文件并在HTML中引入,或者使用CDN链接引入。例如:
<script src="https://cdn.jsdelivr.net/npm/vanilla - lazyload@17.3.1/dist/lazyload.min.js"></script>
- 然后,在JavaScript中初始化懒加载。例如:
const lazyLoadInstance = new LazyLoad();
- 可以通过配置参数来定制懒加载的行为。例如,设置可视区域的阈值为50%,即当图片50%进入可视区域时开始加载:
const lazyLoadInstance = new LazyLoad({ threshold: 0.5 });
- 优点:功能强大,通常具有较好的兼容性处理,提供多种配置选项,如加载动画、延迟加载时间等,可以快速实现懒加载功能并且有较好的用户体验。
- 缺点:需要引入外部库,增加了项目的依赖;如果库的体积较大,可能会增加页面的加载时间。
本文来自博客园,作者:jialiangzai,转载请注明原文链接:https://www.cnblogs.com/zsnhweb/p/18646167
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!