面试题答案
一键面试- 方案一:使用
vue-lazyload
插件- 原理:
vue-lazyload
插件通过指令(如v-lazy
)来实现图片的懒加载。它会监听图片元素进入浏览器的可视区域,当图片即将进入或已经进入可视区域时,才将图片的真实src
赋值给图片标签,从而触发图片加载。其内部利用了IntersectionObserver
API 来高效地监听元素与视口的相交变化情况,如果浏览器不支持该 API 则会采用scroll
事件模拟实现。
- 原理:
- 方案二:基于
IntersectionObserver
手动实现- 原理:
IntersectionObserver
是浏览器原生提供的 API,它允许异步观察目标元素与其祖先元素或顶级文档视口(viewport)交叉变化的情况。在 Vue 项目中,可以在组件的mounted
钩子函数中创建IntersectionObserver
实例,观察图片元素。当观察到图片元素与视口的相交比例达到一定阈值(通常设为 0 及以上,表示开始进入视口)时,就将图片的真实src
赋值给图片标签,触发图片加载。这种方式更加灵活,可根据具体需求定制懒加载的逻辑和阈值等。
- 原理: