图片懒加载
什么是图片懒加载
为什么需要做图片懒加载
-
提高页面的加载速度 -
提高用户体验感 -
减少不必要的带宽
懒加载的原理
技术点
webAPI 的方法 IntersectionObserver
vue 3 的自定义指令
使用 DOM 的 onerror 方法 处理图片加载异常
代码实现
1、?在components/index.js文件中
//导入图片对象
?import defaultImg from '@/assets/images/defaultImg.png'
??
?//创建自定义指令函数
?const defaultDirective=(app)=>{
? ?app.directive('lazyLoad',{
? ? ?mounted(el,bindings){
? ? ? ?//创建观察者对象
? ? ? ?const observer=new IntersectionObserver(([{isIntersecting}])=>{
? ? ? ? ?//判断是否进入可视区域
? ? ? ? ?if(isIntersecting){
? ? ? ? ? ? //把 v-lazyLoad 绑定的图片地址赋值给 el 的 src
? ? ? ? ? ?el.src=bindings.value
? ? ? ? ? ?//停止监听
? ? ? ? ? ?observer.unobserver(el)
? ? ? ? ? ?//处理图片的异常:设置默认图片
? ? ? ? ? ?el.onerror=()=>{
? ? ? ? ? ? ?el.src=defaultImg
? ? ? ? ? }
? ? ? ? ? ? }
? ? ? },{
? ? ? ? ?//配置el进入可视区域的
? ? ? ? ?threshold:0.01
? ? ? })
? ? ? ?//监听 el 进入可视区域
? ? ? ?observer.observe(el)
? ? }
? })
?}
??
??
?//导出
?export default{
? ?install(app){
? ? ?//调用自定义指令函数
? ? ?defaultDirective(app)
? }
?}
2、在页面组件中将 img 的 :src 换成自定义指令 v-lazyLoad
?<img v-lazyLoad='http://fsdgsgxvxdf...'/>
|