实现加载资源等待页面功能
当一个页面有多个图片资源需要加载时,在进入页面时有个加载蒙版动画效果可以更好的解决闪屏的问题。
那么该如何实现这个加载蒙版呢?可以尝试一下 uni.getImageInfo
Api。
第一步,将需要加载的图片资源存放到一个数组变量中。
javascript
const imageResources = [
'http://127.0.0.1:8000/1.png',
'http://127.0.0.1:8000/2.png',
'http://127.0.0.1:8000/3.png',
...
];
第二步,uni.getImageInfo
结合 Promise
获取图片资源并判断是否加载完成。
javascript
/** 存放加载好的图片资源 */
const loadedImages = ref([])
const imagePromises = imageResources.map((imagePath) => {
return new Promise((resolve, reject) => {
uni.getImageInfo({
src: imagePath,
success(res) {
// * 将加载好的图片信息添加到 loadedImages 数组中
loadedImages.value.push({ path: res.path })
resolve()
},
fail(err) {
console.log(err)
reject(imagePath)
},
})
})
})
// * 等待所有图片加载完成
Promise.all(imagePromises)
.then(() => {
console.log('全部加载完毕')
})
.catch((error) => {
console.error('Error:', error)
})
由于图片资源大部分都是网络路径,在下载的时候通常也会遇到网络波动等不确定因素导致失败等问题。
同时,上方的 Promise.all.catch
只能返回一个错误的 Promise
无法获取到全部下载失败的图片。
可以考虑使用 Promise.allSettled
来遍历所有的错误信息,例如:
javascript
Promise.allSettled(imagePromises).then((results) => {
results.forEach((result) => {
if (result.status === 'rejected') {
console.error(result.reason)
}
})
})
这样,在重新加载函数里,我们只需要下载失败的资源文件即可,无需从头全部下载完。