0

0

怎样使用Intersection Observer实现懒加载_它有什么优势

紅蓮之龍

紅蓮之龍

发布时间:2025-12-29 22:24:32

|

454人浏览过

|

来源于php中文网

原创

intersection observer 是浏览器原生 api,用于高效监听元素与视口的交叉状态,实现懒加载;它无需手动计算位置、不阻塞主线程、支持异步回调及局部容器,性能优于 scroll 事件。

怎样使用intersection observer实现懒加载_它有什么优势

Intersection Observer 是浏览器原生提供的 API,专门用于监听目标元素与视口(或指定容器)的交叉状态变化。实现图片、组件或内容的懒加载时,它比传统的 scroll 事件监听更高效、更轻量。

懒加载的核心逻辑:只在元素即将进入可视区域时才加载资源

传统方案常依赖监听 scrollresize 事件,频繁触发重排重绘,还容易因节流/防抖设置不当导致加载延迟或卡顿。Intersection Observer 把这个过程交给浏览器底层调度,回调函数只在元素真正进入或离开阈值范围时执行,不阻塞主线程。

  • 无需手动计算元素位置、滚动偏移量或视口尺寸
  • 自动处理滚动、缩放、页面可见性切换等场景
  • 支持异步回调,天然适配 Promise 和现代加载逻辑(如动态 import)

基础用法:三步完成图片懒加载

假设页面中图片使用 data-src 存放真实地址,src 先为空或占位图:

NNiji·Journey
NNiji·Journey

二次元风格绘画生成器,由 Spellbrush 与 Midjourney 共同设计开发

下载
  • 创建观察器:传入回调函数和配置项(如 threshold: 0.1 表示元素 10% 进入视口就触发)
  • 定义回调:在回调中判断 isIntersecting,为真则加载图片并停止观察该元素
  • 开始观察:对每个带 data-src<img alt="怎样使用Intersection Observer实现懒加载_它有什么优势" > 调用 observer.observe(img)

代码片段示意:

const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src;
      observer.unobserve(img); // 加载后停止观察,避免重复触发
    }
  });
}, { threshold: 0.1 });

document.querySelectorAll('img[data-src]').forEach(img => observer.observe(img));

相比 scroll + getBoundingClientRect 的明显优势

Intersection Observer 不是“更好写的 scroll”,而是架构层面的升级:

  • 性能友好:浏览器在空闲时段批量处理交叉计算,不打断渲染帧,FPS 更稳定
  • 兼容性扎实:Chrome 51+、Firefox 55+、Safari 12.1+、Edge 79+ 均已支持,配合简单降级(如 onload fallback)可覆盖绝大多数用户
  • 语义清晰:关注“是否可见”,而非“坐标多少”,逻辑更贴近业务意图,维护成本低
  • 支持根容器:可指定任意元素作为“视口”,轻松实现局部滚动容器内的懒加载(如弹窗列表、卡片流)

实用技巧与注意事项

真正落地时,几个细节会影响体验和健壮性:

  • 给图片设置固定宽高或 aspect-ratio,防止加载时布局跳动
  • 配合 loading="lazy" 属性做双重保障(现代浏览器会自动处理原生懒加载)
  • 对关键首屏图片,仍建议直接写 src,避免白屏风险
  • 服务端开启 HTTP/2 或 CDN 缓存,让懒加载后的请求更快响应
  • 若需兼容老版本 iOS Safari,可用 polyfill(如 w3c 官方 polyfill),但注意 polyfill 仍基于 scroll 模拟,性能略打折扣

热门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中文网欢迎大家前来学习。

836

2023.11.06

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

1723

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

397

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

1034

2025.04.24

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

764

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

764

2023.08.10

promise的用法
promise的用法

“promise” 是一种用于处理异步操作的编程概念,它可以用来表示一个异步操作的最终结果。Promise 对象有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。Promise的用法主要包括构造函数、实例方法(then、catch、finally)和状态转换。

335

2023.10.12

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

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

4

2026.03.10

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何进行WebSocket调试
如何进行WebSocket调试

共1课时 | 0.1万人学习

TypeScript全面解读课程
TypeScript全面解读课程

共26课时 | 5.1万人学习

前端工程化(ES6模块化和webpack打包)
前端工程化(ES6模块化和webpack打包)

共24课时 | 5.2万人学习

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

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