uni-app基于plus.downloader的图片懒加载功能,支持本地缓存
uni-app基于plus.downloader的图片懒加载功能,支持本地缓存
基于plus.downloader的图片懒加载功能,支持本地缓存
如果有样式问题的话,请移步至http://www.cnblogs.com/phillyx/p/4649128.html
简单说一下
在app中,对一些变动不频繁的图片数据(如个人头像等),是需要存储在本地的。我相信这对大多数的app都是强需求的。
怎么使用呢
img
标签默认都有data-src
属性,用来存放网络链接,src
属性初始是最好给一个默认本地图片链接,下载好会自动替换掉
<img data-src="远程链接" src="默认图片">
如果在列表中,通过下拉刷新、上拉刷新加载数据,加载下一页的时候可以如下做:
一次新增多条数据时,为避免重复渲染页面及重新下载正在下载中的图片等问题,新增的img
要设置data-pageno
属性,如下使用arttemplate
写的模板
<script id="tmpl" type="text/html">
{{each items as item i}}
<li class="mui-table-view-cell" data-id='{{item.id}}'>
<img data-src="{{item.url}}" data-pageno="{{item.pageno}}" src="img/default.png">
</li>
{{/each}}
</script>
在js中怎么用呢
var html = template('tmpl', data);
document.querySelector("#pullrefresh").innerHTML = html;
lazyImg.pageno=data.pageno;
lazyImg.lazyLoad();
如果不需要分页或者零散的数据,直接添加lazy
类就可以了
<img data-src="远程链接" src="默认图片" class="lazy">
然后直接调用lazyImg.lazyLoad()
就可以了
注意
lazyimg.js
是结合cache.js
一齐使用的,代码都已提交至github
地址在https://github.com/phillyx/MUIDemos/tree/master/js/lazyimg.js
也可直接使用合并后的代码https://github.com/phillyx/MUIDemos/tree/master/dist/common.js
在uni-app中实现基于plus.downloader
的图片懒加载功能并支持本地缓存,可以通过以下步骤来实现。这涉及到使用plus.downloader
来下载图片,并将其缓存到本地,同时在需要显示图片时通过监听滚动事件来实现懒加载。以下是一个简化的代码示例:
1. 引入必要的模块
首先,确保你的项目中已经引入了必要的模块,并进行了相应的权限申请。
// manifest.json 中申请网络权限和文件系统权限
{
"mp-weixin": { // 或其他平台配置
"requiredPrivateInfos": ["chooseImage", "saveImageToPhotosAlbum"]
},
"plus": {
"distribute": {
"android": {
"permissions": [
"INTERNET",
"WRITE_EXTERNAL_STORAGE"
]
},
"ios": {
"plist": [
"NSAppTransportSecurity",
"NSPhotoLibraryAddUsageDescription"
]
}
}
}
}
2. 下载并缓存图片
使用plus.downloader
下载图片并缓存到本地。
function downloadAndCacheImage(url, callback) {
const dtask = plus.downloader.createDownload(url, {}, (d, status) => {
if (status === 200) {
const localPath = d.filename; // 本地缓存路径
callback(localPath);
} else {
console.error('Download failed:', status);
}
});
dtask.start();
}
3. 懒加载图片
通过监听页面滚动事件来实现图片的懒加载。
<template>
<view>
<scroll-view scroll-y="true" @scroll="onScroll">
<view v-for="(img, index) in images" :key="index">
<image v-if="img.localPath" :src="img.localPath" style="width: 100px; height: 100px;"></image>
<view v-else class="placeholder" @click="loadImage(img, index)"></view>
</view>
</scroll-view>
</view>
</template>
<script>
export default {
data() {
return {
images: [
{ url: 'https://example.com/image1.jpg', localPath: '' },
// 更多图片...
],
threshold: 100 // 滚动阈值
};
},
methods: {
onScroll(e) {
const scrollTop = e.detail.scrollTop;
const scrollHeight = e.detail.scrollHeight;
const clientHeight = uni.getSystemInfoSync().windowHeight;
if (scrollTop + clientHeight >= scrollHeight - this.threshold) {
this.loadMoreImages();
}
},
loadImage(img, index) {
downloadAndCacheImage(img.url, localPath => {
this.$set(this.images, index, { ...img, localPath });
});
},
loadMoreImages() {
// 根据需要加载更多图片的逻辑
}
}
};
</script>
以上代码展示了如何在uni-app中实现基于plus.downloader
的图片懒加载功能并支持本地缓存。注意,这里的示例代码仅用于说明原理,实际应用中可能需要根据具体需求进行调整和优化。