📌 温馨提示:
本文内容可能随时间变动而失效,请以页面显示的更新时间为准。
若内容已不准确或资源失效,欢迎留言或联系站长反馈修正。
⚠️ 免责声明:
本文仅供学习与参考,观点仅代表作者个人意见,与本站无关。
如有侵权问题,请立即联系我们处理,谢谢理解与支持。
本文内容可能随时间变动而失效,请以页面显示的更新时间为准。
若内容已不准确或资源失效,欢迎留言或联系站长反馈修正。
⚠️ 免责声明:
本文仅供学习与参考,观点仅代表作者个人意见,与本站无关。
如有侵权问题,请立即联系我们处理,谢谢理解与支持。
在前端面试中,常见的图片懒加载方式主要有以下几种:
- 使用
loading
属性:现代浏览器支持<img>
标签的loading
属性,将其值设为lazy
,可实现图片延迟加载,只有当图片滚动到所在位置才会显示。属性值还有eager
,默认值为eager
,表示图像立即加载 。这是实现懒加载最简单的方法,无需额外JavaScript代码。不过它存在一些缺点,加载触发点不稳定、不可控,不同浏览器及版本、网络环境下触发条件不同;会延迟首屏关键图加载,影响首次内容绘制(FCP)性能;加载状态不可监听,无法实现加载动画、失败容错处理及渐进式加载体验;使用场景局限,仅适用于<img>
和<iframe>
标签 。 - 利用
IntersectionObserver API
:该API可异步检测目标元素与祖先元素或顶级文档视口相交情况的变化。创建IntersectionObserver
实例时,传入可见性变化的回调函数callback
和配置对象option
(可选)。对于需要懒加载的图片,用data - src
代替src
存储真实图片地址。当观察到图片进入视口(通过判断回调函数参数IntersectionObserverEntry
对象的isIntersecting
属性为true
),将data - src
的值赋给src
,从而实现图片加载。这种方式功能强大、灵活,能满足加载控制、动画处理、骨架屏等需求,但代码相对复杂 。 - 结合
getBoundingClientRect
和事件监听:在旧版本浏览器不支持IntersectionObserver API
时,可使用getBoundingClientRect
方法获取元素位置和大小信息,结合scroll
、resize
等事件监听来实现懒加载。通过判断元素的top
值处于0到视口高度之间,确定元素进入可视区,进而加载图片。但这种方式兼容性存在问题,且频繁监听事件可能影响性能 。 - 使用第三方库:如
lazysizes
和lozad.js
等。以lazysizes
为例,引入库文件后,给<img>
标签添加lazyload
类和data - src
属性(取代src
),库会自动处理懒加载逻辑。使用第三方库可快速实现功能,通常还提供丰富的配置选项,但会增加项目依赖,引入外部库可能影响页面加载速度,存在版本兼容性风险 。 - 在框架中使用特定方法
- Vue中使用
vue - lazyload
插件:先通过npm install vue - lazyload --save
安装插件,在项目入口文件(如main.js
)引入并使用,可配置加载时的占位图、加载失败时的图像等选项。在组件中使用v - lazy
指令替换src
属性实现图片懒加载 。 - React中使用
React.lazy
结合Suspense
组件:创建懒加载组件包装图片,使用React.lazy
动态导入该组件,配合Suspense
组件在组件加载时显示加载状态。不过React.lazy
目前仅支持默认导出,如果要加载的组件是命名导出,需用中间模块重新导出为默认模块 。
- Vue中使用
THE END
暂无评论内容