uni-app项目实战笔记23--解决首次加载额外图片带来的网络消耗问题

前面实现了图片的预览和切换,不过存在一个问题,当我们点击某张图片进行预览时,会把列表中其他图片一并进行请求,带来额外的网络开销。如下面的图片列表

点击上面图片列表中的第一张图片,观察浏览器控制台,发现一次性额外加载了多张其他图片,带来额外性能和网络开销。

因此我们希望预览图片时,减少不必要一次性图片加载。

方法一:只渲染当前图片

html 复制代码
<swiper circular :current="currentIndex" @change="swiperChange">
	<swiper-item  v-for="(item,index) in classList" :key="item._id">
		<image v-if="index == currentIndex"  @click="maskChange" :src="item.picurl" mode="aspectFill"></image>
	</swiper-item>
</swiper>

通过在swiper中image添加v-if条件,只有当条件满足时才渲染。上面的代码中实现:索引为当前索引。如此便实现只加载当前预览图片的请求。但是,当我们左右滑动图片时,前后出现了空白类似卡顿现象:

显然这种方法虽然节省了性能和网络开销,但带来不好的用户体验。

方法二:声明一个变量,存储当前用户预览过的图片,和前后各一张图片,当预览到第1张继续左滑时,切换为最后一张,当用户预览到最后一张继续右滑时切换为第一张。下面是代码实现:

javascript 复制代码
//声明一个响应式变量数组readImages,记录用户预览过的图片
const readImages = ref([])
//图片列表,classList的值参照前面的笔记
const classList = ref([])
//首次加载
onLoad((e)=>{
	currentId.value = e.id
	currentIndex.value = classList.value.findIndex(item=>item._id == currentId.value)
	readImageFun()
})

//切换图片
const swiperChange =(e) =>{
	currentIndex.value = e.detail.current;
	readImageFun()
}

//获取需要加载的图片,数组添加3张图片,从左到右分别是前一张,当前张,后一张
function readImageFun(){
	readImages.value.push(
		currentIndex.value<=0 ? classList.length-1 : currentIndex.value-1,
		currentIndex.value,
		currentIndex.value>= classList.length-1 ? 0 : currentIndex.value+1
	)
	//使用set进行去重
	readImages.value = [...new Set(readImages.value)]
}

核心在于:

1、往数组添加3张图片,从左到右分别是前一张,当前张,后一张;

2、如果当前是第一张,则上张为图片数组的最后一张;

3、如果当前是最后一张,则下一张为图片数组的第一张。

模板的v-if判断条件替换为:

html 复制代码
 v-if="readImages.includes(index)"

如此便可实现以最小网络消耗加载资源同时切换时没有空白卡顿现象产生。

相关推荐
wan5555cn3 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
2501_915918414 小时前
Web 前端可视化开发工具对比 低代码平台、可视化搭建工具、前端可视化编辑器与在线可视化开发环境的实战分析
前端·低代码·ios·小程序·uni-app·编辑器·iphone
2501_915106324 小时前
iOS 使用记录和能耗监控实战,如何查看电池电量消耗、App 使用时长与性能数据(uni-app 开发调试必备指南)
android·ios·小程序·uni-app·cocoa·iphone·webview
雁于飞4 小时前
vscode中使用git、githup的基操
笔记·git·vscode·学习·elasticsearch·gitee·github
rannn_1115 小时前
【Javaweb学习|实训总结|Week1】html基础,CSS(选择器、常用样式、盒子模型、弹性盒布局、CSS定位、动画),js(基本类型、运算符典例)
css·笔记·学习·html
Ro Jace5 小时前
心灵笔记:第一性原理学习与实践
笔记
aramae6 小时前
C++ -- 模板
开发语言·c++·笔记·其他
小马学嵌入式~7 小时前
嵌入式 SQLite 数据库开发笔记
linux·c语言·数据库·笔记·sql·学习·sqlite
hour_go7 小时前
用户态与内核态的深度解析:安全、效率与优化之道
笔记·操作系统
摇滚侠9 小时前
Vue3入门到实战,最新版vue3+TypeScript前端开发教程,笔记03
javascript·笔记·typescript