学习Uni-app开发小程序Day25

这一章学习了触底加载更多阻止无效的网络请求、分类列表存入Storage在预览页面读取缓存展示、通过swiper的事件实现真正的壁纸预览及切换

触底加载更多阻止无效的网络请求、load-more样式的展现

前面已经学习了当列表触底后,会继续加载,当到最后一层后,给出一个已经没有了的提示。这一章把这个功能继续完成下。在老师的视频中,给出了使用插件,z-paging插件,我这边下载下来,试用了下,发现完全无头脑,不会使用,只能是回归到使用onReachBottom中,这里有许多细节,我这边现在一步一步说。
当列表滑动到最后一层后,要给个提示,并且不能再让获取数据了,因为已经是最后一层了,在获取数据只会消耗网络,不会有新的数据了,这里设置一个标记符,const noData=ref(false),默认是false,当获取到最后一层后,没有数据的时候,那接口参数的默认值数量就会大于接口返回的数量,这就给noData变成true,让不在加载数据了,这就达到了阻止无效的网络请求了。

刚进入页面后要给个正在加载的提示,这里使用组件uni-load-more,给设定是lading,就达到这个效果了,在实验过程中,发现当进入的时候,会出现两个或者是数据已经出来了但是提示框还在,这里就要使用定义的标记符和数据在页面进行判断了,

<!-- 这是顶部的刷新提示 -->
<view class="ladingLayout" v-if="!classList.length && !noData"><uni-load-more status="loading"></uni-load-more>
</view>
<!-- 这是底部的加载或者最后一页的提示 -->
<view class="ladingLayout" v-if="noData || classList.length"><uni-load-more :status="noData ? 'noMore' : 'loading'"></uni-load-more>
</view>

上面就是刷新的时候,要进行判断,这里记录下两个判断的依据:
第一个v-if:这里是当刚进入页面获取数据,那数据集合是空的,noData也是false,这就提示正在加载,这里使用的是&&的关系,只有两个都满足,才会显示uni-load-more
第二个v-if:当还没有到最后一层的时候,不论是数据源还是noData,都已经变成true或者是有值,只有两个中的任何一个满足条件,就显示uni-load-more;这里给uni-load-more的status设置了两种情况,当noData是true的时候,uni-load-more就显示的是没有数据了,反之显示正在加载

下面是设置的js

	const noData = ref(false)const getClassList = async () => {let res = await apiClassList(queryParams);classList.value = [...classList.value, ...res.data];if (queryParams.pageSize > res.data.length) {noData.value = true}uni.setStorageSync("storageClassList", classList.value);console.log(res);}// 触底加载更多onReachBottom(() => {if (noData.value) return;queryParams.pageNum++;getClassList();})

这里提出一个概念,骨架屏,是什么?查了网络才知道,其实就是设置的加载占位图,就是前面做的这些,只是叫法不同而已。
在小程序中,出现一种情况,就是在虚拟机上,有个虚拟的home键,会把正在加载的提示给遮挡住,这里就需要用到前面学习的,设定一个安全高度,在html最下面,设置一个空的组件,设置安全高度,<view class="safe-area-inset-bottom"></view>;这里使用的class名称,就是在公共区域设置的安全高度,想着可能使用安全高度的地方会很多,那就把这个区域高度放在公共css中,

.safe-area-inset-bottom{height:env(safe-area-inset-bottom);
}

env(safe-area-inset-bottom) 这就是我们设置的安全区域高度

数据存入Storage在预览页面读取缓存展示

在项目中,是根据图片的类型,获取该类型下的图片,获取的数据会很多,然后点击图片进行预览的时候,总不能每一次都获取一次数据吧,这样太消耗性能了,因此,在获取到列表后,将列表数据放在缓存中,预览的时候,只用从缓存中拿到数据源,在展示就可以了。
数据存储到缓存
数据是一个对象,那么存储到缓存的时候,就要使用:
uni.setStorageSync("storageClassList", classList.value);,storageClassList,这是名称,方便在使用的地方根据名称取值的,后面的是数据源。
获取缓存的数据

const storageClassList = uni.getStorageSync("storageClassList") || []; //获取缓存中的数据源

这就是获取缓存数据,后面加的||[],这是预防当缓存中没有数据,给一个默认的值,
现在已经把数据拿到了,那就只用把数据放在页面上进行渲染就可以了,

通过swiper的事件实现真正的壁纸预览及切换

数据在页面上已经显示出来了,但是在滑动的时候,并没有更改前面的数量,这里的数据是当前图片的下标/总数,那要怎么使用这个呢?这里可以让从列表上点击的时候,就把当前图片的id传给预览页面,这样就能根据findIndex将下标得到,通过swiper的属性current属性,可以让显示当前下标下的图片,这个下标加一也是提示的位置,
这里把当前这个页面的代码全部给出,大家可以学习下,

<swiper circular :current="currentIndex" @change="swiperChange"><swiper-item v-for="item in classList" :key="item._id"><image @click="maskChange" :src="item.picurl" mode="aspectFilla"></image></swiper-item></swiper><view class="mask" v-if="maskState"><view class="goBack" :style="{top:getStatusBarHeigth()+'px'}" @click="toBack"><uni-icons type="back" size="20" color="#fff"></uni-icons></view><view class="count">{{ currentIndex +1 }}/{{classList.length}}</view>
<script setup>
const classList = ref([]); //数据源,const currentId = ref(null) //当前点击的id,是从上一页传递过来的const currentIndex = ref(0) //当前的下标const storageClassList = uni.getStorageSync("storageClassList") || []; //获取缓存中的数据源classList.value = storageClassList.map(item => {return {...item,picurl: item.smallPicurl.replace("_small.webp", ".jpg")}})//获取传递过来的idonLoad((e) => {currentId.value = e.id;//通过findIndex获取下标currentIndex.value = classList.value.findIndex(item => item._id == currentId.value);})//这是定义的swiper的滑动事件const swiperChange = (e) => {currentIndex.value=e.detail.current;}</script>

以上就实现效果了,里面有注释,有不对的地方欢迎指出。
学海无涯苦作舟,书山有路勤为径!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/14575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动化测试--利用pytest实现整条业务链路测试

​ 概述 前面一章讲解了单个接口的测试&#xff0c;但是实际项目中&#xff0c;因为权限和登录状态的限制&#xff0c;大部分接口没办法直接访问到&#xff0c;这时候我们想访问到一个系统的接口&#xff0c;就需要模拟用户登录拿到用户的token和所拥有的权限之后再将这些信息…

vivado2020.2创建hls仿真工程实现led闪烁

下载vivado2020.2后会有这个出现在桌面 点击进入创建工程&#xff0c;这里注意不要有前面的\我再复制的时候复制错了导致创建失败 按f光标就会跳转到下一个f开头的函数处&#xff0c;要查找其他函数也同理 生成了一个synthesis summary文件 找到目录下生成的.v文件 an 点…

Pod进阶——资源限制以及探针检查

目录 一、资源限制 1、资源限制定义&#xff1a; 2、资源限制request和limit资源约束 3、Pod和容器的资源请求和限制 4、官方文档示例 5、CPU资源单位 6、内存资源单位 7、资源限制实例 ①编写yaml资源配置清单 ②释放内存&#xff08;node节点&#xff0c;以node01为…

【知识蒸馏】多任务模型 logit-based 知识蒸馏实战

一、什么是逻辑&#xff08;logit&#xff09;知识蒸馏 Feature-based蒸馏原理是知识蒸馏中的一种重要方法&#xff0c;其关键在于利用教师模型的隐藏层特征来指导学生模型的学习过程。这种蒸馏方式旨在使学生模型能够学习到教师模型在特征提取和表示方面的能力&#xff0c;从…

有些错误,常犯常新、常新常犯:记录一个使用element-plus的tooltip组件的错误

使用element-plus的tooltip组件&#xff0c;最开始的写法是这样的&#xff1a; <el-tooltipclass"box-item"effect"dark"content"tooltip content" ><el-button v-if"isDisabled" :underline"false" type"pr…

持续总结中!2024年面试必问 20 道 Redis面试题(五)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问 20 道 Redis面试题&#xff08;四&#xff09;-CSDN博客 九、Redis的同步机制了解么&#xff1f; Redis 的同步机制是其复制策略的核心部分&#xff0c;确保数据在主节点&#xff08;master&#xff09;和从节点…

【C语言】程序员自我修养之文件操作

【C语言】程序员自我修养之文件操作 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C语言学习之路 文章目录 【C语言】程序员自我修养之文件操作前言一.文件介绍1.1为什么使用文件1.2文件分类1.3二进制文件和文本文件 二.文件的打开和关闭2.…

桌面藏线大法

1有线改无线&#xff1a; 蓝牙鼠标 蓝牙键盘 蓝牙耳机 2将排插贴到桌子底下 购物软件上搜 3断舍离 不要的电子产品统统扔掉 4 洞洞板和挂钩 这个不用介绍了

爬虫基本原理及requests库用法

文章目录 一、爬虫基本原理1、什么是爬虫2、爬虫的分类3、网址的构成4、爬虫的基本步骤5、动态【异步】页面和静态【同步】页面6、请求头 二、requests基本原理及使用1、chrome 抓包按钮详解1.1 Elements1.2 元素定位器1.3 Network1.4 All1.5 XHR1.6 Preserve log1.7 手机模式1…

暴雨信息液冷计算解决方案亮相CCIG 2024

5月24日&#xff0c;2024中国图象图形大会&#xff08;CCIG&#xff09;在陕西西安正式开幕。作为涵盖图像图形各专业领域的综合性的全国性学术会议&#xff0c;CCIG面向开放创新、交叉融合的发展趋势&#xff0c;为图像图形相关领域的专家学者和产业界的同仁&#xff0c;搭建了…

Java+Spring+ MySQL + MyCat云HIS有哪些优势?智慧医疗云(HIS)低成本与安全保障的完美结合

JavaSpring MySQL MyCat云HIS有哪些优势&#xff1f;智慧医疗云(HIS)低成本与安全保障的完美结合 云HIS的优点包括节省成本、便捷高效、稳妥安全等。通过云HIS&#xff0c;医疗机构无需在本地建立机房、购买服务器和应用软件&#xff0c;降低了硬件和人力成本。同时&#xff0…

虚拟化介绍

虚拟化介绍 概述概念特点优势实现手段 虚拟化架构概述寄居虚拟化架构裸金属虚拟化架构操作系统虚拟化架构混合虚拟化架构几种虚拟化架构的比较虚拟化架构与虚拟化技术的关系 虚拟化技术分类服务器虚拟化技术分类 存储虚拟化技术分类网络虚拟化技术分类 服务器虚拟化技术处理器虚…

开源软件 | 一文彻底搞懂许可证的定义、起源、分类及八大主流许可证,让你选型不再头疼

为什么开源软件会存在许可证&#xff0c;许可证的起源与产生目的是为了解决什么问题&#xff1f;许可证的定义又是怎样的&#xff1f;什么是Copyleft&#xff0c;与Copyright有何区别&#xff1f;开源软件常见的许可证有哪些&#xff1f;这些许可证都有什么特点&#xff1f;接下…

[c++] 小游戏 能量1.0.1 版本 zty出品

大家好 紧急修改&#xff0c;发现判断游戏是否结束部分有问题&#xff0c;紧急修改bug&#xff0c;对大家造成的不便我深感歉意&#xff0c;对不起 先赞后看 养成习惯 code&#xff1a; #include<bits/stdc.h> #include<windows.h> using namespace std; int rg…

Zabbix实现7x24小时架构监控

上篇&#xff1a;https://blog.csdn.net/Lzcsfg/article/details/138774511 文章目录 Zabbix功能介绍Zabbix平台选择安装Zabbix监控端部署MySQL数据库Zabbix参数介绍登录Zabbix WEBWEB界面概览修改WEB界面语言添加被控主机导入监控模板主机绑定模板查看主机状态查看监控数据解…

6.封装读写游戏数据的功能

前置知识&#xff1a;5.模仿CheatEngine实现锁血无敌功能&#xff08;封装它的代码&#xff09; 封装功能.cpp文件 #include "封装功能.h"GAMECheat::GAMECheat(unsigned pid, unsigned _baseAdr, unsigned _readTime) {readTime _readTime;baseAdr _baseAdr;hPr…

代码随想录算法训练营第三十四天 | 理论基础、455.分发饼干、376、摆动序列、53.最大子序和

目录 理论基础 455.分发饼干 思路 代码 376.摆动序列 思路 代码 53.最大子序和 思路 代码 理论基础 代码随想录 455.分发饼干 代码随想录 思路 可以是大饼干优先满足大胃口&#xff0c;也可以是小饼干优先满足小胃口。 代码 class Solution:def findContentChildre…

ArkUI-X开发指南:【SDK配置和构建说明】

ArkUI-X SDK配置和构建说明 ArkUI-X SDK是ArkUI-X开源项目的编译产物&#xff0c;可将ArkUI-X SDK集成到现有Android和iOS应用工程中&#xff0c;使开发者基于一套ArkTS主代码&#xff0c;就可以构建支持多平台的精美、高性能应用。SDK内容包含ArkUI跨平台运行时&#xff0c;组…

安装SSL证书能提高网站访客吗?

在当今互联网时代&#xff0c;网站的安全性和用户体验至关重要。随着网络攻击和数据泄露事件的不断增加&#xff0c;用户对网站的信任也变得越来越重要。SSL证书是一种数字证书&#xff0c;可以在Web服务器和网页浏览器之间建立加密链接&#xff0c;确保网站传输的数据安全&…

【HarmonyOS尝鲜课】- 前言

面向人群 本课程适用于HarmonyOS应用开发的初学者。 有无经验的开发者都可以轻松掌握ArkTS语言声明式开发范式&#xff0c;体验更简洁、更友好的HarmonyOS应用开发旅程。 什么是HarmonyOS HarmonyOS&#xff08;鸿蒙操作系统&#xff09;是由华为技术有限公司开发的全场景分…