导语
最近在做的小程序项目设计大量图片的展示,小程序已经提供了图片的懒加载功能,但是由于图片本身比较大加上要展示的图片比较多,如何以一个比较友好的方式展示未加载完成的过程就是一个必须解决的问题了。
思路
由于小程序没有提供 Image 这个 js 对象,所以在小程序中实现预加载不能直接像原生js 一样,直接使用 new Image()创建一个图片对象,只能在视图层创建图片,通过onLoad事件监听图片加载完成。
实现图片模糊加载的思路就是先加载一个目标图片的缩略图,缩略图的加载一般非常快可以忽略不计,缩略图加载完成之后以高斯模糊的形式展示,与此同时加载原图,原图加载完成后替代原缩略图,原图和缩略图需要设置相同的宽高。 思路理清楚之后,开始码代码吧~
由于项目使用了Taro框架,下面的代码写法是React的写法,原生或者其他框架也可以参考,没有太大的出入,思路都是一样的。
imgLoader.js(以下为部分代码)
// 监听原图加载完成
toggleOriginLoaded() {
this.setState({
loaded: true
});
}
// 监听缩略图加载完成
toggleThumbLoaded() {
this.setState({
thumbLoaded: true
});
}
render() {
let { loaded, thumbLoaded } = this.state;
let { imgU, imgW, imgH } = this.props;
// 根据传入的宽高设置缩略图和原图的宽高
let style = {
width: imgW + 'rpx',
height: imgH + 'rpx'
}