0

0

如何在 DOM 加载完成后自动触发懒加载图片的加载

碧海醫心

碧海醫心

发布时间:2026-03-10 16:15:19

|

326人浏览过

|

来源于php中文网

原创

本文介绍一种轻量、可靠的方式:利用 IntersectionObserver 在 DOM 就绪后主动触发所有 loading="lazy" 图片的真实加载,避免手动移除属性的误区,并提供可直接运行的优化代码与关键注意事项。

本文介绍一种轻量、可靠的方式:利用 `intersectionobserver` 在 dom 就绪后主动触发所有 `loading="lazy"` 图片的真实加载,避免手动移除属性的误区,并提供可直接运行的优化代码与关键注意事项。

现代网页性能优化中,为 如何在 DOM 加载完成后自动触发懒加载图片的加载 添加 loading="lazy" 是减少首屏资源请求数、加速 DOMContentLoaded 的常用手段。但若页面存在大量“非首屏但需尽快加载”的图片(如长页中部的内容图),单纯依赖浏览器原生懒加载可能造成用户滚动时明显延迟或空白。此时,一个更可控的策略是:在 DOM 构建完成(DOMContentLoaded)后,主动触发所有懒加载图片的加载,而非等待其进入视口——这既能保留首屏快速渲染的优势,又能提升后续内容的加载响应性。

以下是一个经过验证的完整实现方案:

新视窗CMS企业管理程序 5.1
新视窗CMS企业管理程序 5.1

新视窗企业管理系统是一款小巧、实用、利于后续开发的ASP程序。适合大中小型企业的网站建设。1、新闻管理 2、产品管理 3、订单管理 4、广告管理 5、下载管理 6、留言管理 8、单页栏目(如企业简介,资质荣誉)9、人才招聘等等。 新视窗企业管理系统 5.1 更新日志:1、修改产品列表的图片自动缩略,防止图片变形.2、修改后台添加产品分类时,排序ID不写入数据库的错误.3、修改首页企业简介的链接地址

下载
document.addEventListener('DOMContentLoaded', () => {
  // ✅ 正确选择:匹配所有 loading="lazy" 的 img 元素
  const lazyImages = document.querySelectorAll('img[loading="lazy"]');

  // ? 使用 IntersectionObserver 主动触发加载(即使已在视口外)
  const observer = new IntersectionObserver(
    (entries) => {
      entries.forEach((entry) => {
        const img = entry.target;
        // ⚠️ 关键:仅在未加载时才赋值 src,防止重复触发
        if (!img.src || img.src === img.dataset.src) return;

        // ✅ 安全赋值:优先使用 data-src,兼容传统懒加载写法
        if (img.dataset.src) {
          img.src = img.dataset.src;
        } else if (img.srcset && img.dataset.srcset) {
          img.srcset = img.dataset.srcset;
        }

        // ✅ 可选:移除 loading 属性以明确标识已激活(非必需,但语义清晰)
        img.removeAttribute('loading');

        // ✅ 停止观察该元素,避免重复回调
        observer.unobserve(img);
      });
    },
    {
      // ? 设置 rootMargin 让观察提前触发(例如提前 200px 进入视口即加载)
      rootMargin: '200px',
      // threshold 设为 0 表示只要有一像素交叉即触发
      threshold: 0
    }
  );

  // ? 开始观察所有懒加载图片
  lazyImages.forEach((img) => observer.observe(img));
});

? 关键要点说明

  • 选择器必须准确:document.querySelectorAll("lazy") 错误地查找 标签;正确写法是 img[loading="lazy"],表示“所有 loading 属性值为 lazy 的 如何在 DOM 加载完成后自动触发懒加载图片的加载 元素”。
  • 无需手动 removeAttribute('loading') 来“启用”加载:浏览器原生懒加载机制在 loading="lazy" 存在时会自动延迟加载;而一旦你显式设置了 img.src(且非空),浏览器将立即发起请求——loading 属性本身不影响已赋值后的加载行为。移除它仅为语义标记,非技术必需。
  • 务必校验 src 状态:避免重复赋值导致多次请求(尤其在 data-src 与 src 混用场景下),使用 if (!img.src || img.src === img.dataset.src) 是健壮实践。
  • rootMargin 是性能杠杆:设置 '200px' 可让图片在用户滚动到其上方 200px 时就开始加载,显著提升感知流畅度,比“等完全进入视口再加载”更友好。
  • 不推荐“全局移除 loading 属性”脚本:例如遍历所有 img 并 el.removeAttribute('loading'),这会破坏浏览器原生懒加载的底层调度逻辑,且无法保证资源按需加载顺序。

进阶建议
若页面含无限滚动或时间线类组件(如社交 Feed),应结合 unobserve + removeChild 实现图片卸载(offscreen cleanup),防止内存持续增长。但对于常规静态长页,上述方案已足够高效、简洁且兼容性良好(支持 Chrome 76+、Firefox 75+、Safari 15.4+)。

最终效果:首页 145 个请求中约 87 张图片在 DOMContentLoaded 后被主动、批量、无阻塞地触发加载,首屏时间不变,整体内容就绪时间显著缩短。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

1053

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

834

2023.11.06

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

846

2023.08.22

DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

4290

2024.08.14

PHP 高并发与性能优化
PHP 高并发与性能优化

本专题聚焦 PHP 在高并发场景下的性能优化与系统调优,内容涵盖 Nginx 与 PHP-FPM 优化、Opcode 缓存、Redis/Memcached 应用、异步任务队列、数据库优化、代码性能分析与瓶颈排查。通过实战案例(如高并发接口优化、缓存系统设计、秒杀活动实现),帮助学习者掌握 构建高性能PHP后端系统的核心能力。

112

2025.10.16

PHP 数据库操作与性能优化
PHP 数据库操作与性能优化

本专题聚焦于PHP在数据库开发中的核心应用,详细讲解PDO与MySQLi的使用方法、预处理语句、事务控制与安全防注入策略。同时深入分析SQL查询优化、索引设计、慢查询排查等性能提升手段。通过实战案例帮助开发者构建高效、安全、可扩展的PHP数据库应用系统。

99

2025.11.13

JavaScript 性能优化与前端调优
JavaScript 性能优化与前端调优

本专题系统讲解 JavaScript 性能优化的核心技术,涵盖页面加载优化、异步编程、内存管理、事件代理、代码分割、懒加载、浏览器缓存机制等。通过多个实际项目示例,帮助开发者掌握 如何通过前端调优提升网站性能,减少加载时间,提高用户体验与页面响应速度。

36

2025.12.30

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

84

2026.03.06

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

4

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
nginx浅谈
nginx浅谈

共15课时 | 0.9万人学习

前端开发(基础+实战项目合集)
前端开发(基础+实战项目合集)

共60课时 | 4.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号