javascript_如何实现图片懒加载

图片懒加载通过延迟加载非可视区图片提升性能,核心是用data-src存储真实路径,结合Intersection Observer监听进入视口时加载,推荐使用Observer API以提升效率并降低主线程负担。

javascript_如何实现图片懒加载

图片懒加载的核心思路是延迟加载页面中未进入可视区域的图片,等用户滚动到对应位置时再加载真实图片。这样可以减少初始页面加载时间、降低服务器压力、提升用户体验。

1. 基本原理:利用 data-src 占位

将真实的图片地址放在 data-src 属性中,src 先设置为空或占位图。当图片需要显示时,再把 data-src 的值赋给 src。

示例HTML结构:

@@##@@

2. 判断图片是否进入视口

通过 getBoundingClientRect() 方法判断元素是否出现在浏览器视窗内。

判断函数示例:

function isInViewport(element) {  const rect = element.getBoundingClientRect();  return (    rect.top = 0  );}

3. 监听滚动事件并加载图片

在滚动时检查所有懒加载图片,如果进入视口,就将 data-src 赋值给 src,并移除监听避免重复触发。

立即学习“Java免费学习笔记(深入)”;

实现代码:

const images = document.querySelectorAll('img.lazy');function lazyLoad() {  images.forEach(img => {    if (isInViewport(img)) {      img.src = img.dataset.src;      img.classList.remove('lazy'); // 加载后移除类名    }  });}// 初始化调用一次(防止首屏图片不触发)lazyLoad();// 监听滚动和resizewindow.addEventListener('scroll', lazyLoad);window.addEventListener('resize', lazyLoad);

4. 提高性能:使用节流(throttle)

滚动事件频繁触发,建议加上节流避免性能问题。

简单节流实现:

function throttle(func, delay) {  let inThrottle;  return function() {    if (!inThrottle) {      func.apply(this, arguments);      inThrottle = true;      setTimeout(() => inThrottle = false, delay);    }  };}window.addEventListener('scroll', throttle(lazyLoad, 100));

5. 使用 Intersection Observer(推荐方案)

现代浏览器推荐使用 Intersection Observer API,性能更好,无需手动计算位置。

优化版本:

const observer = new IntersectionObserver((entries) => {  entries.forEach(entry => {    if (entry.isIntersecting) {      const img = entry.target;      img.src = img.dataset.src;      img.classList.remove('lazy');      observer.unobserve(img); // 加载完成后停止观察    }  });});// 观察所有懒加载图片images.forEach(img => {  if (img.classList.contains('lazy')) {    observer.observe(img);  }});

这种方式更高效,不会影响主线程性能,是目前最主流的做法。

基本上就这些。用 data-src 存储真实路径,结合 Intersection Observer 实现监听,能有效实现图片懒加载。兼容性方面,如需支持老浏览器,可搭配 polyfill 或降级到 scroll 事件方案。描述

以上就是javascript_如何实现图片懒加载的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1541452.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
为图片画廊中的每张图片设置差异化背景色
上一篇 2025年12月21日 13:20:25
Redux RTK Query:通过外部事件高效管理缓存失效与数据同步
下一篇 2025年12月21日 13:20:40

相关推荐

  • VSCode如何优化文件搜索速度 VSCode全局搜索的性能优化建议

    vscode文件搜索慢的核心原因是未合理排除无关文件及系统环境限制,解决方法是一套组合拳:1. 配置search.exclude在settings.json中排除node_modules、dist等无关文件夹;2. 确保使用.gitignore并开启search.useignorefiles;3. …

    2026年9月27日
    000
  • 【Linux/C++】Linux下C++命令行编译示例

    本文是关于c++++编程语言基础和linux系统操作基础的系列文章的第二部分。我们将详细介绍在linux环境下如何编译c++代码,并展示相关的编译示例和技巧。 文章目录 准备源代码编译实战引入目录进行编译使用-Wall、-std 参数进行编译生成库文件链接静态库生成可执行文件链接动态库生成可执行文件…

    2026年9月27日
    100
  • Gemini移动端如何节省流量 Gemini数据压缩与缓存设置指南

    Gemini移动端如何节省流量 Gemini数据压缩与缓存设置指南Gemini移动端如何节省流量 Gemini数据压缩与缓存设置指南Gemini移动端如何节省流量 Gemini数据压缩与缓存设置指南Gemini移动端如何节省流量 Gemini数据压缩与缓存设置指南

    gemini移动端节省流量的核心方法包括:1.开启应用内的数据压缩模式,选择低分辨率加载图片和视频;2.关闭自动播放功能,防止后台流量浪费;3.限制或关闭后台刷新与预加载,减少无谓的数据更新;4.定期清理缓存或设置缓存上限,避免过期数据重复下载;5.启用系统级低数据模式,限制后台流量使用;6.关闭g…

    2026年9月27日 • 用户投稿
    100
  • 星巴克点单抖音怎么弄的?快速了解方法与实用技巧

    星巴克点单抖音怎么弄的?快速了解方法与实用技巧星巴克点单抖音怎么弄的?快速了解方法与实用技巧星巴克点单抖音怎么弄的?快速了解方法与实用技巧星巴克点单抖音怎么弄的?快速了解方法与实用技巧

    引言: 在移动互联网高速发展的今天,抖音已成为大众记录生活、分享日常的重要社交平台。不少用户开始关注:是否可以直接在抖音上点星巴克咖啡?答案是肯定的!本文将为您详细介绍如何通过抖音轻松完成星巴克点单,并提供实用操作技巧与相关知识,助您畅享便捷又有趣的消费体验。 一、星巴克为何选择抖音点单?背后趋势解…

    2026年9月27日 • 用户投稿
    000
  • 如何通过地址空间随机化增强安全防护?

    如何通过地址空间随机化增强安全防护?如何通过地址空间随机化增强安全防护?如何通过地址空间随机化增强安全防护?如何通过地址空间随机化增强安全防护?

    ASLR通过随机化内存布局,使攻击者难以预测关键区域地址,显著增加内存攻击难度。 通过地址空间随机化(ASLR),我们能显著提升系统面对内存攻击时的防御能力。核心思想很简单:让攻击者无法预知关键内存区域(比如堆、栈、共享库)的精确位置,从而大幅增加利用漏洞的难度和不确定性。这就像在一片黑暗中寻找一个…

    2026年9月27日 • 用户投稿
    100
  • sublime怎么配置java语法检查_sublime Java语法检查配置

    sublime怎么配置java语法检查_sublime Java语法检查配置sublime怎么配置java语法检查_sublime Java语法检查配置sublime怎么配置java语法检查_sublime Java语法检查配置sublime怎么配置java语法检查_sublime Java语法检查配置

    首先安装Package Control,再通过它安装SublimeLinter和SublimeLinter-javac插件,确保系统已配置JDK并能全局运行javac,最后在SublimeLinter设置中启用javac,即可实现Java语法检查。 Sublime Text 本身不自带 Java 语…

    2026年9月27日 • 用户投稿
    1000
  • 设置Apache FOP字体相对路径:使用fop.xconf配置跨平台字体

    设置Apache FOP字体相对路径:使用fop.xconf配置跨平台字体设置Apache FOP字体相对路径:使用fop.xconf配置跨平台字体设置Apache FOP字体相对路径:使用fop.xconf配置跨平台字体设置Apache FOP字体相对路径:使用fop.xconf配置跨平台字体

    Apache FOP在不同操作系统下配置字体时,使用绝对路径会遇到兼容性问题。本文详细介绍如何在fop.xconf中利用标签和相对embed-url属性,灵活指定字体文件的相对路径,确保应用程序在多种环境中都能正确加载和渲染字体,避免硬编码路径,提升可移植性。 FOP字体配置的跨平台挑战 在使用ap…

    2026年9月27日 • 用户投稿
    500
  • qq浏览器如何删除历史访问记录 QQ浏览器单条与批量删除历史记录教程

    qq浏览器如何删除历史访问记录 QQ浏览器单条与批量删除历史记录教程qq浏览器如何删除历史访问记录 QQ浏览器单条与批量删除历史记录教程qq浏览器如何删除历史访问记录 QQ浏览器单条与批量删除历史记录教程qq浏览器如何删除历史访问记录 QQ浏览器单条与批量删除历史记录教程

    首先打开QQ浏览器,进入“我的”页面点击“历史记录”。若要删除单条记录,长按目标条目后点击删除并确认;若需批量删除,点击“管理”勾选多个条目后选择“删除所选”并确认;如要清空全部历史,点击右下角“清空”按钮,勾选“同时清空全部历史记录”后确认即可完成操作。 如果您在使用QQ浏览器时希望管理您的浏览历…

    2026年9月27日 • 用户投稿
    600
  • sublime怎么配置git_Sublime Text集成Git版本控制教程

    sublime怎么配置git_Sublime Text集成Git版本控制教程sublime怎么配置git_Sublime Text集成Git版本控制教程sublime怎么配置git_Sublime Text集成Git版本控制教程sublime怎么配置git_Sublime Text集成Git版本控制教程

    Sublime Text 本身不内置 Git 功能,但可以通过插件和外部 Git 环境实现集成。以下是配置 Sublime Text 使用 Git 的完整方法,帮助你在编辑器中便捷地进行版本控制操作。 1. 安装并配置 Git 环境 确保你的系统已安装 Git,并能通过命令行使用: Windows:…

    2026年9月27日 • 用户投稿
    100
  • win8如何分区硬盘_Win8硬盘分区教程

    win8如何分区硬盘_Win8硬盘分区教程win8如何分区硬盘_Win8硬盘分区教程win8如何分区硬盘_Win8硬盘分区教程win8如何分区硬盘_Win8硬盘分区教程

    首先打开磁盘管理工具,通过压缩卷释放未分配空间或删除分区清空区域,再利用新建简单卷向导设置大小、分配盘符并格式化为NTFS,从而完成分区创建或重组。 如果您希望在Windows 8系统中对硬盘进行重新规划,以便更好地管理文件或安装多个操作系统,则可以通过系统自带的磁盘管理工具来创建、调整或删除分区。…

    2026年9月27日 • 用户投稿
    100
  • 库迪咖啡的抖音优惠券:小程序核销操作步骤

    库迪咖啡的抖音优惠券:小程序核销操作步骤库迪咖啡的抖音优惠券:小程序核销操作步骤库迪咖啡的抖音优惠券:小程序核销操作步骤库迪咖啡的抖音优惠券:小程序核销操作步骤

    如今,抖音已成为社交平台中的热门应用,而库迪咖啡作为深受大众喜爱的连锁咖啡品牌,近期在抖音上线了多项吸引人的优惠券活动,引发众多咖啡爱好者争相参与。如果你也想获取并使用这些超值福利,却还不清楚具体如何操作,接下来将为你详细解析通过抖音小程序领取及核销优惠券的完整流程。 1. 启动抖音App 请确认你…

    2026年9月27日 • 用户投稿
    100
  • 怎样让 AI 模型持续改进工具与豆包配合进行改进?全流程指南​

    怎样让 AI 模型持续改进工具与豆包配合进行改进?全流程指南​怎样让 AI 模型持续改进工具与豆包配合进行改进?全流程指南​怎样让 AI 模型持续改进工具与豆包配合进行改进?全流程指南​怎样让 AI 模型持续改进工具与豆包配合进行改进?全流程指南​

    要让ai模型与豆包配合更好,需通过持续反馈、调优和迭代实现。1. 明确使用场景并设定目标,记录问题并打标签以指导优化方向;2. 善用豆包反馈机制,具体描述问题并定期分析反馈记录;3. 进阶用户可结合结构化外部数据进行微调并通过a/b测试验证效果;4. 优化提示词设计,明确角色、格式和逻辑顺序,提升交…

    2026年9月27日 • 用户投稿
    000
  • 高通:95%的用户愿为搭载骁龙心片的高端手机溢价买单

    高通:95%的用户愿为搭载骁龙心片的高端手机溢价买单高通:95%的用户愿为搭载骁龙心片的高端手机溢价买单高通:95%的用户愿为搭载骁龙心片的高端手机溢价买单高通:95%的用户愿为搭载骁龙心片的高端手机溢价买单

    在骁龙峰会2025上,高通高级副总裁don mcguire表示,最新调研显示,84%的消费者认为搭载骁龙处理器的笔记本表现出色,具备强大性能;同时,95%的用户愿意为配备骁龙移动平台的高端智能手机支付更高价格。 据CNMO了解,骁龙品牌在多个市场已展现出强劲影响力。根据CyberMedia Rese…

    2026年9月27日 • 用户投稿
    000
  • Sublime运行Python代码中文乱码_修改默认编码格式解决方案

    Sublime运行Python代码中文乱码_修改默认编码格式解决方案Sublime运行Python代码中文乱码_修改默认编码格式解决方案Sublime运行Python代码中文乱码_修改默认编码格式解决方案Sublime运行Python代码中文乱码_修改默认编码格式解决方案

    答案是修改文件编码声明、配置Sublime构建系统、更改系统区域设置或输出到文件。首先在Python文件首行添加# — coding: utf-8 –,然后在Sublime中创建自定义构建系统并设置环境变量PYTHONIOENCODING为utf-8,接着可调整Windows…

    2026年9月27日 • 用户投稿
    000
  • 就业培训里PHP+MySQL安全开发的讲解深度

    php+mysql安全开发的讲解深度应包括:1)基础安全措施的详细讲解,2)常见攻击类型和防范方法的深入探讨,3)最佳实践和开发习惯的培养,以提升学员的技术技能和安全意识。 在就业培训中,关于PHP+MySQL安全开发的讲解深度是一个非常关键的话题。这不仅关系到学员能否掌握必要的技能,也直接影响到他…

    2026年9月27日
    000
  • Java在Windows CMD终端实现ANSI颜色输出的策略与实践

    Java在Windows CMD终端实现ANSI颜色输出的策略与实践Java在Windows CMD终端实现ANSI颜色输出的策略与实践Java在Windows CMD终端实现ANSI颜色输出的策略与实践Java在Windows CMD终端实现ANSI颜色输出的策略与实践

    本文深入探讨了Java程序在Windows CMD终端中无法正确显示ANSI颜色代码的问题,并提供了两种有效的解决方案。针对不同Java版本和需求,我们介绍了通过外部命令(如echo)代理输出的兼容性方法,以及利用Java 22+ Foreign Function & Memory API直…

    2026年9月27日 • 用户投稿
    000
  • 夸克AI搜索和普通搜索的区别_夸克新旧搜索模式对比分析

    夸克AI搜索和普通搜索的区别_夸克新旧搜索模式对比分析夸克AI搜索和普通搜索的区别_夸克新旧搜索模式对比分析夸克AI搜索和普通搜索的区别_夸克新旧搜索模式对比分析夸克AI搜索和普通搜索的区别_夸克新旧搜索模式对比分析

    AI搜索通过理解意图生成直接答案,如夸克采用“先思考后搜索”策略,整合多源信息提供结构化回答。1、与传统关键词匹配不同,AI搜索输出分点建议等归纳内容。2、支持多轮对话与上下文追溯,可连续追问并准确识别指代对象。3、集成AI写作、文件总结等功能,实现从检索到任务解决的跃迁。4、在个性化推荐中强化隐私…

    2026年9月27日 • 用户投稿
    200
  • 联想 moto razr 50 Ultra AI 元启版哥特玫瑰限定版上市

    联想 moto razr 50 Ultra AI 元启版哥特玫瑰限定版上市联想 moto razr 50 Ultra AI 元启版哥特玫瑰限定版上市联想 moto razr 50 Ultra AI 元启版哥特玫瑰限定版上市联想 moto razr 50 Ultra AI 元启版哥特玫瑰限定版上市

    9 月 5 日,摩托罗拉手机官方宣布,联想 moto razr 50 ultra ai 元启版全新潘通流行色限定版——哥特玫瑰上市!提供 16gb+1tb 一种内存组合,售价 6999 元。 联想 moto razr 50 Ultra AI 元启版 小折叠屏手机 4.0 英寸外屏,1272 × 10…

    2026年9月27日 • 用户投稿
    000
  • Excel批量转换日期格式技巧

    Excel批量转换日期格式技巧Excel批量转换日期格式技巧Excel批量转换日期格式技巧Excel批量转换日期格式技巧

    1、 null 2、 选取需要调整格式的日期内容。 3、 使用鼠标选中需转换格式的日期区域,支持多区域同时选择。 4、 弹出列分割设置界面。 5、 点击菜单栏中的“数据”选项,选择“分列”,启动文本分列向导窗口。 6、 设置分列方式为固定宽度模式。 7、 勾选“固定宽度”单选按钮,然后点击“下一步”…

    2026年9月27日 • 用户投稿
    000
  • sublime怎么关联文件类型_Sublime Text设置特定文件扩展名的默认语法

    sublime怎么关联文件类型_Sublime Text设置特定文件扩展名的默认语法sublime怎么关联文件类型_Sublime Text设置特定文件扩展名的默认语法sublime怎么关联文件类型_Sublime Text设置特定文件扩展名的默认语法sublime怎么关联文件类型_Sublime Text设置特定文件扩展名的默认语法

    在Sublime Text中设置特定文件扩展名的默认语法:打开文件后点击右下角语法名称,选择所需模式并设为该扩展名默认;2. 可通过编辑Packages/User/Preferences.sublime-settings文件添加extensions映射,指定.log用Plain Text、.myco…

    2026年9月27日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信