一、前言
在网速较低或者网站的服务器宽带只有几MB的情况下,网页中的图片加载时,要么空白,要么像打印机一样一行一行地“扫描”出来,为了提升用户体验,可以给图片标签外加一层骨架。
二、详细设计
每张图片都要配一张它的低分辨率图片,可以在photoshop中完成。建议加上一个高斯模糊。这个图片用作骨架的底图,它的大小只有30k左右,页面很快就能加载好。
这是没加骨架的html
<div class="box">
<img src="@/assets/load1.jpg">
</div>
加骨架后
<div class="box blur-load" :class="{loaded:isLoaded}" :style="{backgroundImage: 'url(' + require('@/assets/loading1.jpg') + ')'}">
<img src="@/assets/load1.jpg">
</div>
blur-load是骨架样式,loaded是控制图片是否显示,后面的style是加载刚刚说的底图。
这是blur-load的css
.blur-load{
background-size: cover;
background-position: center;
background-repeat: no-repeat;
}
.blur-load::before{
content: '';
position: absolute;
inset: 0;
animation: pulse 2.5s infinite ease-in-out;
background-color: rgba(255,255,255,0.3);
}
@keyframes pulse {
0%{
background-color: rgba(255,255,255,0.3);
}
50%{
background-color: rgba(255,255,255,0);
}
100%{
background-color: rgba(255, 255, 255, 0.3);
}
}
.blur-load>img{
opacity: 0;
}
.blur-load.loaded>img{
opacity: 1;
transition: opacity 0.5s ease-in-out;
}
图片加载好后显示图片
image_load(){
let img = new Image();
img.src = require('@/assets/load2.png');
img.onload = ()=>{
this.isLoaded = true;
}
}
在生命周期mounted中调用该方法
mounted(){
this.image_load();
},