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 先为空或占位图:

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

代码片段示意:

寻鲸AI
寻鲸AI

寻鲸AI是一款功能强大的人工智能写作工具,支持对话提问、内置多场景写作模板如写作辅助类、营销推广类等,更能一键写作各类策划方案。

下载
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 模拟,性能略打折扣

相关专题

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

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

715

2023.08.11

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

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

714

2023.11.06

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

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

1244

2023.08.21

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

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

373

2024.03.05

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

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

827

2025.04.24

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

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

466

2023.08.10

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

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

466

2023.08.10

promise的用法
promise的用法

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

296

2023.10.12

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.29

热门下载

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

精品课程

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

共1课时 | 0.1万人学习

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

共26课时 | 5万人学习

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

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