學習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.pswp.cn/bicheng/14575.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14575.shtml
英文地址,請注明出處:http://en.pswp.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;是由華為技術有限公司開發的全場景分…