懒加载的核心是元素进入视口时才加载资源,推荐使用 Intersection Observer API 监听并触发加载,兼容性不足时降级为节流 scroll + getBoundingClientRect,同时需处理图片 load/error 状态及首屏关键资源优化。
懒加载的核心是让图片或内容在进入视口时才开始加载,避免页面初始就请求大量资源。关键不是等页面加载完,而是监听滚动和元素位置变化,动态触发资源加载。
用 Intersection Observer API 是
最推荐的方式——它性能好、写法简洁、原生支持,无需手动计算偏移量或频繁触发 scroll 事件。
rootMargin(如 "0px 0px 100px 0px" 表示提前 100px 开始加载)data-src 属性,src 先设为空或占位图isIntersecting 为 true,把 data-src 赋值给 src,并可调用 unobserve() 防止重复加载对于 IE 或老版本 Safari,可用传统 scroll + getBoundingClientRect 方案,但要注意节流(如用 setTimeout 防抖)避免卡顿。
window.onscroll 或 addEventListener('scroll')
el.getBoundingClientRect().top 判断是否已出现在视口内
仅设置 src 不够,还需监听 load 和 error 事件,提升用户体验。
loading="lazy"(HTML 原生懒加载)作为基础层,JS 懒加载作增强懒加载不只是图片,也可用于视频、组件、广告位甚至分页列表。
decoding="async" 属性帮助浏览器异步解码图片,进一步优化渲染流不复杂但容易忽略。核心就三点:用对 API、管好状态、留好退路。