讲师中心 微信公众号
AI工具推荐 视频效率加速

如何实现javascript懒加载_有哪些图片与组件延迟技巧?

老敏姑娘_9537

老敏姑娘_9537

发布时间:2026-01-06 16:12:08

|

1017人浏览过

|

来源于php中文网

原创

优先使用原生 loading="lazy" 实现图片懒加载,仅在需支持背景图、老浏览器或监听加载状态时才用 IntersectionObserver 等 JS 方案;组件懒加载重在延迟初始化而非渲染,背景图和 CSS 图片必须 JS 替代,且须预留尺寸、处理加载态与失败回退。

如何实现javascript懒加载_有哪些图片与组件延迟技巧?

浏览器原生 loading="lazy" 已覆盖绝大多数图片懒加载场景,无需 JS 就能生效;但对自定义组件、复杂交互动画或兼容老版本浏览器时,仍需手动实现。

图片懒加载:优先用 loading="lazy",慎用 JS 方案

现代 Chrome/Firefox/Edge(≥2020)已支持 <img loading="lazy" alt="如何实现javascript懒加载_有哪些图片与组件延迟技巧?" >,它由浏览器原生控制,性能好、无 JS 依赖、自动处理滚动与 Resize。但有明确限制:

  • loading="lazy" 仅对 <img alt="如何实现javascript懒加载_有哪些图片与组件延迟技巧?" > 和 <iframe></iframe> 生效,不适用于背景图或 CSS url()
  • 默认只对“非首屏”图片生效;若图片在视口内(如快速滚动后回拉),可能跳过懒加载
  • Safari 直到 v15.4 才完整支持,旧版需降级方案
  • 无法监听加载完成状态或失败重试 —— 这些得靠 JS 补足

若必须用 JS,推荐 IntersectionObserver 而非 scroll 事件:

const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src;
      img.classList.remove('lazy');
      observer.unobserve(img);
    }
  });
}, { threshold: 0.1 });

document.querySelectorAll('img.lazy').forEach(img => observer.observe(img));

React/Vue 组件懒加载:按需触发渲染,而非仅图片

组件懒加载核心是「延迟初始化」,不是等图片出现才渲染。常见误区是把组件包裹在 IntersectionObserver 里——这会导致频繁挂载/卸载,反而损害性能。

Seo Listing
Seo Listing

跨境电商SEO优化与Listing文案生成专家,擅长将中式英语或基础卖点转化为本土化、高转化率且符合SEO规范的文案。

下载

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

  • 对长列表中非首屏区块(如第 50 条之后的卡片),用 React.memo + useMemo 缓存渲染结果,再配合 IntersectionObserver 控制是否 render
  • Vue 中可用 v-intersection 指令或 defineAsyncComponent 实现路由级组件懒加载,但注意:后者是代码分割(import()),和 DOM 可见性无关
  • 真正需要“组件级懒加载”的场景极少;多数时候应优先优化单个组件内部资源(比如把图表库的初始化推迟到 ref 挂载后)

背景图与 CSS 图片:没有 loading="lazy",只能 JS 替代

CSS 背景图(background-image: url(...))无法使用原生懒加载,必须靠 JS 注入样式或切换 class:

  • 给元素加 data-bg 属性存真实 URL,用 IntersectionObserver 触发 element.style.backgroundImage = `url(${url})`
  • 避免直接操作 style.backgroundImage,改用 class 切换 + CSS 变量更利于复用和缓存
  • 注意:CSS image-set() 或 srcset 语义不适用于背景图懒加载,它们只影响资源选择,不控制加载时机
.card { background-image: var(--bg-url, none); }
.card.loaded { --bg-url: url('/hero.webp'); }

容易被忽略的细节:占位、加载态、SEO 与失效回退

懒加载不是“隐藏然后突然出现”,它必须配合视觉反馈和容错机制:

  • 所有懒加载图片/组件必须预留尺寸(aspect-ratio 或宽高属性),否则会引发布局偏移(CLS)
  • <img alt="如何实现javascript懒加载_有哪些图片与组件延迟技巧?" > 应始终带 alt,即使 src 为空;搜索引擎仍可索引 alt 文本
  • 当 IntersectionObserver 不可用(如 IE 或禁用 JS),需 fallback 到立即加载逻辑,或至少保证内容可访问
  • 图片加载失败时,onerror 回调比 CSS :not([src]) 更可靠,且能触发重试逻辑

最常被跳过的一步:没设 height/width 或 aspect-ratio 的懒加载图片,会在加载瞬间撑开页面,伤害用户体验和 Core Web Vitals。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

相关专题

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

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

2866

2023.08.11

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

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

5759

2023.11.06

Chrome开启无痕模式
Chrome开启无痕模式

本专题整合了Chrome无痕模式开启相关内容,阅读专题下面的文章了解更多详细教程。

4107

2026.03.24

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

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

3062

2023.08.21

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

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

2854

2024.03.05

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

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

3232

2025.04.24

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

4276

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

306

2025.12.06

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

100

2026.10.28

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.6万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 6.1万人学习

CSS教程
CSS教程

共754课时 | 99.7万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn