JavaScript中如何实现页面懒加载_IntersectionObserver

IntersectionObserver 实现页面懒加载最轻量高效,无需监听 scroll/resize,浏览器原生支持;核心三步:创建观察器、配置 threshold/rootMargin、调用 observe,加载后及时 unobserve。

javascript中如何实现页面懒加载_intersectionobserver

页面懒加载用 IntersectionObserver 实现最轻量、性能最好,不用监听 scroll 或 resize,浏览器原生支持,兼容性已覆盖主流现代浏览器(Chrome 51+、Firefox 55+、Safari 12.1+、Edge 79+)。

基本用法:监听元素是否进入视口

创建观察器实例,传入回调函数和配置项,再调用 observe() 开始监听目标元素:

const observer = new IntersectionObserver((entries) => {  entries.forEach(entry => {    if (entry.isIntersecting) {      // 元素进入视口,执行加载逻辑(如图片 src、组件渲染等)      const img = entry.target;      img.src = img.dataset.src; // 加载真实图片      observer.unobserve(img); // 加载完即停止观察,避免重复触发    }  });}, {  threshold: 0.1 // 当 10% 可见时就触发回调});// 观察所有带 data-src 的图片document.querySelectorAll('img[data-src]').forEach(img => observer.observe(img));

常用配置项说明

threshold:触发回调的可见比例阈值,可为单个数字(如 00.5)或数组(如 [0, 0.25, 0.5, 0.75, 1]),值越小越早触发;

root:指定滚动容器(默认是浏览器视口),比如设为某个 div 元素,就以该容器为“视口”来判断是否相交;

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

rootMargin:类似 CSS 的 margin,用于扩大或缩小判定区域,例如 '50px 0px' 表示提前 50px 开始加载(上边距 +50px,触发更早);

trackVisibilitydelay:高级选项,仅在部分浏览器支持,一般不需要手动设置。

实用技巧与注意事项

加载完成后及时调用 unobserve(el),避免反复执行;若需复用(如列表滚动中反复进出),可不取消,但要在回调里加状态判断(如 if (el.loaded) return); 图片加载失败时建议 fallback 处理,比如显示占位图或错误提示; 服务端渲染(SSR)场景下,注意只在客户端初始化 IntersectionObserver,避免 Node 环境报错; 旧浏览器不支持时,可用 polyfill(如 w3c 官方 polyfill),或退化为 scroll 监听(慎用,注意节流)。

封装一个可复用的懒加载 Hook(类 React 场景)

简单封装便于组件内调用:

function useLazyLoad(callback) {  const observerRef = useRef(null);  useEffect(() => {    observerRef.current = new IntersectionObserver(      (entries) => entries.forEach(e => e.isIntersecting && callback(e.target)),      { threshold: 0.05 }    );    return () => observerRef.current?.disconnect();  }, []);  return (node) => {    if (node && observerRef.current) {      observerRef.current.observe(node);    }  };}// 在组件中使用function LazyImage({ src, placeholder }) {  const ref = useLazyLoad((el) => {    el.src = src;  });  return @@##@@;}

基本上就这些。核心就三步:创建 observer、设定阈值、observe 目标——不复杂但容易忽略 unobserve 和 rootMargin 的灵活运用。

JavaScript中如何实现页面懒加载_IntersectionObserver

以上就是JavaScript中如何实现页面懒加载_IntersectionObserver的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月21日 13:05:08
下一篇 2025年12月21日 13:05:29

相关推荐

  • javascript_如何实现测试用例

    答案:JavaScript测试依赖框架如Jest、Mocha、Jasmine,通过编写可重复的测试用例验证函数行为。以Jest为例,使用test()定义用例,expect().toBe()进行断言,覆盖正常、边界及异常情况,如类型错误抛出异常、浮点数精度处理,运行npm test执行测试,绿色为通过…

    2025年12月21日
    000
  • javascript_物联网设备通信

    JavaScript凭借Node.js和Web API可高效实现IoT设备通信。1. Node.js通过serialport、MQTT、HTTP及WebSocket支持设备连接与数据交互;2. 浏览器利用Web Serial、Web Bluetooth、WebUSB或WebSocket与设备通信;3…

    2025年12月21日
    000
  • JavaScript数组遍历优化_JavaScript循环性能对比

    传统 for 循环性能最优,适合高频操作;for…of 语法简洁,接近传统循环性能;forEach 语义清晰但较慢,不支持 break;for…in 不推荐用于数组;map/filter 适合数据转换但有性能开销。 在JavaScript开发中,数组遍历是常见操作。不同循环方…

    2025年12月21日
    000
  • PWA技术实现要点_Service Worker的缓存策略

    Service Worker缓存策略是PWA核心,通过Cache First、Network First等策略提升离线可用性与加载速度,结合版本控制与Workbox工具实现高效缓存管理。 要实现一个高效可靠的PWA(渐进式Web应用),Service Worker 的缓存策略是核心环节之一。它决定了…

    2025年12月21日
    000
  • JavaScript中如何实现进度条_定时更新宽度

    JavaScript原生实现进度条需三步:1. HTML构建容器与进度条结构;2. CSS设置容器宽高、隐藏溢出并为进度条添加宽度过渡;3. JS用setInterval定时更新style.width百分比值,达目标后clearInterval防泄漏。 用 JavaScript 实现进度条并定时更新…

    2025年12月21日
    000
  • 移动端适配_javascript响应式设计

    JavaScript在移动端适配中补充CSS响应式设计,通过监听屏幕变化动态调整交互逻辑。1. 使用resize事件配合防抖控制DOM操作频率;2. 推荐使用matchMedia监听媒体查询,语义化判断设备类型,实现内容动态加载、触控事件绑定、虚拟键盘处理及动画控制等场景,提升多端用户体验。 移动端…

    2025年12月21日
    000
  • 深入理解JavaScript原型链_javascript高级编程

    原型链是JavaScript对象属性查找的机制,当对象自身无该属性时,会向上追溯其原型,直至null。每个对象有[[Prototype]]指向原型,函数的prototype属性用于实例继承。构造函数创建实例时,实例的[[Prototype]]指向构造函数的prototype。通过Object.cre…

    2025年12月21日
    000
  • JavaScript类型数组_javascript二进制

    ArrayBuffer是JavaScript中表示固定长度二进制数据的缓冲区,需通过类型数组或DataView等视图操作。1. 类型数组如Uint8Array提供特定数据类型解释,适用于Canvas、WebGL等场景;2. DataView支持灵活读写不同数据类型及字节序控制,适合处理复杂二进制结构…

    2025年12月21日
    000
  • 前端测试方案_javascript质量保证

    前端测试需覆盖单元、组件、端到端层面,结合静态分析与CI/CD流程。1. 单元测试用Jest/Vitest验证函数模块,追求高覆盖率且关注关键路径;2. 组件测试用@testing-library或@vue/test-utils检查渲染与交互,避免耦合实现细节;3. E2E测试通过Cypress/P…

    2025年12月21日
    000
  • JavaScriptAsyncAwait_JavaScript异步代码优化

    Async/Await通过async声明异步函数,await暂停执行直至Promise完成,使异步代码更同步化;支持try/catch错误处理,避免回调地狱,提升可读性与维护性。 异步编程是JavaScript中的核心概念之一,尤其在处理网络请求、文件操作或定时任务时尤为常见。传统的回调函数和Pro…

    2025年12月21日
    000
  • 动画性能优化技巧_使用requestAnimationFrame替代setTimeout

    requestAnimationFrame(rAF)通过同步屏幕刷新率实现流畅动画,避免卡顿与资源浪费,相比setTimeout更高效;其自动暂停不可见页面的动画并支持精确控制,结合CSS动画可实现高性能视觉效果,是JavaScript动画的首选方案。 在网页动画开发中,流畅的视觉体验依赖于高效的渲…

    2025年12月21日
    000
  • 弱引用与垃圾回收_WeakMap和WeakSet的实际用途

    WeakMap和WeakSet通过弱引用避免干扰垃圾回收,适用于缓存、私有数据存储和对象标记场景,防止内存泄漏。 很多人知道 WeakMap 和 WeakSet 是 JavaScript 中的弱引用数据结构,但不清楚它们到底有什么用。其实它们的核心价值在于“不干扰垃圾回收”,这在特定场景下非常关键。…

    2025年12月21日
    000
  • JavaScript模块加载_javascript依赖管理

    JavaScript模块化与依赖管理通过ES6 Module、包管理工具及构建系统实现高效开发,推荐使用import/export语法,搭配pnpm或Yarn管理依赖,Vite用于开发,Webpack或Rollup打包生产,结合动态导入优化性能。 JavaScript 模块加载和依赖管理是现代前端开…

    2025年12月21日
    000
  • JavaScript防抖节流实现_javascript性能优化

    防抖和节流是前端优化高频事件的两种手段:防抖通过延时执行,仅在事件停止触发后运行一次,适用于搜索输入等场景;节流则保证函数在指定时间间隔内最多执行一次,适合滚动监听等持续反馈需求。两者核心区别在于执行时机与频率控制,合理选择可显著提升性能。 在前端开发中,用户频繁触发事件(如窗口滚动、输入框输入、按…

    2025年12月21日
    000
  • JavaScript代码规范_javascript最佳实践

    遵循命名规范、优先使用const/let、函数单一职责、合理注释和格式化,提升JavaScript代码可读性与维护性。 写JavaScript代码不只是让程序跑起来,更重要的是让代码可读、可维护、易于协作。遵循一套清晰的规范和最佳实践,能显著提升开发效率和项目质量。 使用一致的命名规则 命名是代码可…

    2025年12月21日
    000
  • JavaScript中什么是Blob对象_如何创建下载

    Blob 是 JavaScript 中表示不可变原始二进制数据的容器,用于安全高效地处理文件、图片等资源;支持通过 new Blob() 创建、URL.createObjectURL() 生成临时 URL 下载,并需手动 revoke 释放内存。 Blob 对象是 JavaScript 中用于表示*…

    2025年12月21日
    000
  • JavaScript并发控制_javascript多任务处理

    JavaScript通过事件循环实现异步任务的并发控制,使用concurrentControl函数限制最大并发数,避免资源耗尽;该函数利用Promise和索引追踪任务执行,确保最多同时运行指定数量的任务,完成后汇总结果,适用于批量请求、文件上传等场景,提升应用稳定性。 JavaScript 是单线程…

    2025年12月21日
    000
  • JavaScript响应式_javascript数据绑定

    JavaScript通过监听数据变化实现响应式,核心是自动更新视图。2. Vue 2用Object.defineProperty拦截属性的get/set,实现依赖追踪和视图更新。3. Vue 3采用Proxy代理整个对象,支持数组和动态属性,更强大灵活。4. 双向绑定结合输入事件与响应式监听,实现数…

    2025年12月21日
    000
  • JavaScript模块化开发_JavaScript工程化实践

    JavaScript模块化通过ES6的import和export实现代码拆分与复用,解决早期命名冲突问题;结合Webpack、Vite等工具提升构建效率,支持Tree-shaking和按需加载,增强可维护性与性能优化。 JavaScript模块化开发是现代前端工程中的核心实践之一。随着项目规模扩大,…

    2025年12月21日
    000
  • JavaScript视频控制_javascript播放器

    首先通过HTML5 video标签和JavaScript实现视频播放控制,具体包括:1. 使用play()和pause()方法实现播放暂停;2. 通过currentTime属性同步进度条并支持拖动跳转;3. 利用volume属性调节音量;4. 调用Fullscreen API实现全屏功能,需由用户点…

    2025年12月21日
    000

发表回复

登录后才能评论
关注微信