场景重现
在微信小程序中,使用
Image
组件来展示图片,图片源可以使用本地资源,也可以来自服务器资源。通常情况下,为了内容的动态展示,需要通过网络请求从接口中获取所用的数据。如果在网络慢的情况下,image
加载图片的过程可能会非常慢,在请求完成之前页面都会因为没有数据而呈现一片空白,这是非常差的用户体验。
实现原理
小程序的Image
组件有两个属性,可以供我们参考:
我们可以实现这两个事件:
-
实现
bindload
,在图片未加载完成时,显示占位图,一旦加载完成,马上隐藏占位图,显示真正的业务图片 -
实现
binderror
,在图片加载错误时,显示占位图。
具体实现
提前准备好一张占位图,放在根目录
images
文件夹中。
自定义组件image-load
为方便复用,减少代码量,提高可维护性,将该功能封装成一个组件,方便后续使用。在项目的根目录下创建components
文件夹,并新建image-load
组件:
编写 image-load
index.wxml
<image wx:if='{{!finishedFlag}}' mode='{{mode}}' src='{{defaultImage}}'
style='{{width ? "width:" + width : ""}};{{height ? "height:" + height : ""}}' />
<image mode='{{mode}}' class='{{finishedFlag ? "" : "before-load"}}' src='{{originalImage}}' bindload='finishLoad'
style='{{finishedFlag && width ? "width:" + width : ""}};{{finishedFlag && height ? "height:" + height : ""}}' />
index.js
Component({
properties: {
defaultImage: String, //默认图片
originalImage: String,//请求的图片
width: String,
height: String,
mode: String
},
data: {
finishedFlag: false
},
methods: {
finishLoad: function(e) {
this.setData({
finishedFlag: true
})
}
}
})
index.json
{
"component": true,
"usingComponents": {}
}
index.wxss
.before-load {
width: 0;
height: 0;
opacity: 0;
}
页面引用
在主页面pages/index
中使用image-load
组件:
index.json中启用组件:
"usingComponents": {
"image-load": "../../components/image-load/index"
}
index.wxml中使用组件:
default-image
是默认图片,放入自己的占位图, original-image
是需要加载的数据图片, 一定要设置照片的宽高,不然图片出不来哦~
<view wx:for="{{banners}}" wx:key="index">
<image-load class="leftImg" default-image="../../images/image_load.png" mode='aspectFill'
original-image="{{ item.url }}" width="100%" height="280rpx" />
</view>
总结
以上就是微信小程序预加载占位图片的全部使用步骤和方法,后续还会推送首页骨架屛
的开发制作过程,请持续关注哦~
创作不易,点个赞,鼓励一下吧~