uniapp中怎麼使用scrpll-view元件實作下拉刷新
uniapp中怎麼使用scrpll-view元件實作下拉刷新?以下這篇文章跟大家介紹一下uniapp使用scroll-view自訂下拉刷新的方法,希望對大家有幫助!
uniapp下拉刷新
#uniapp的下拉刷新有兩個方法, 一種是整體的下拉刷新,使用頁面生命週期函數onPullDownRefresh; 另外一種是局部的下拉刷新也叫自訂下拉刷新, 使用scrpll-view元件中的自訂下拉刷新事件。
一.整個頁面的刷新(onPullDownRefresh)
在js 中定義onPullDownRefresh 處理函數(和onLoad等生命週期函數同級),監聽該頁面使用者下拉刷新事件。 【官方文件】這裡不再做太多介紹!今天的重點在下面
二.自訂頁面刷新(scroll-view)
##元件中遇到的問題
- 觸發不了下拉(原因排查)1、scroll-view組件外部沒有用view包裹. 官網雖然沒有說這個問題, 但是如果外部沒有一個view單獨包裹著這個組件, 就沒有辦法觸發scroll-view組件中的事件。 2、scroll-view沒有設定固定高, 在css中設定height, 設定多高就在多高的區域展現. 例如設定高為50vh(100vh為滿螢幕), 則元件裡邊的內容只會在半屏內上下滾動,不會觸發page的滾動條只會觸發
scroll-view的滾動條. 如果高度不好給確定值, 可以使用scss(lang=' scss')
3、設定高為百分比的話也不能觸發下拉. 高可以使用中的calc計算, 例子中有體現.(注意使用calc計算時, -左右一定要有空格)。
max-hight, 不能使用min-hight。
4、沒有設定scroll-y - 沒有捲動到頂部觸發下拉, 而是在可視頁面中觸發下拉官方預設無論page的捲軸在哪個位置, 只要在scroll-view頁面上下拉都會觸發下拉函數, 這樣用戶體驗非常差. 可以使用
@scroll
#滾動時觸發的函數來獲取
scroll-view 滾動條的位置, 進而來控制refresher-enabled開啟和關閉自訂下拉刷新. 當scroll-view的滾動條滾動到頂部時, 使
refresher-enabled為true, 其他條件為false。
<template> <view> <scroll-view show-scrollbar="true" style="height: 300px" scroll-y="true" :refresher-enabled="isOpenRefresh" :refresher-triggered="triggered" :refresher-threshold="100" refresher-background="gray" @refresherpulling="onPulling" @refresherrefresh="onRefresh" @refresherrestore="onRestore" @refresherabort="onAbort" @scroll="onScroll" > <view v-if="!isOpenRefresh">别拉了,没有更多了~</view> <view class="item" v-for="(item, index) in dataList" :key="index">{{ item }}</view> </scroll-view> </view> </template>
export default { data() { return { triggered: false, dataList: [], arr: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], page: 0, isOpenRefresh: true // 是否开启下拉 }; }, onLoad() { this._freshing = false; this.getData() }, methods: { dealArray(array, groupNum) { let temp = []; for (let i = 0, len = array.length; i < len; i += groupNum) { temp.push(array.slice(i, i + groupNum)); } return temp; }, // 自定义下拉刷新控件被下拉 onPulling(e) { console.log("onpulling", e); if (e.detail.deltaY < 0) return // 防止上滑页面也触发下拉 this.triggered = true; }, // 自定义下拉刷新被触发 onRefresh() { if (this._freshing) return; this._freshing = true; this.page++; setTimeout(() => { this.triggered = false; this._freshing = false; this.getData(); }, 500); }, // 自定义下拉刷新被复位 onRestore() { this.triggered = 'restore'; // 需要重置 console.error("onRestore"); }, // 自定义下拉刷新被中止 onAbort() { console.error("onAbort"); }, getData() { // 前端模拟分页 let temp = this.dealArray(this.arr, 3) if (this.page > temp.length - 1) { this.isOpenRefresh = false return } this.dataList.push(...temp[this.page]) } }, };
<style> view { text-align: center; } .item:nth-child(odd) { background-color: antiquewhite; } .item:nth-child(even) { background-color: aquamarine; } </style>
【注意】scroll-view 下拉刷新會出現上滑頁面也觸發下拉,可以在示範:@refresherpulling="onPulling"
這個方法,如下
if (e.detail.deltaY < 0) return// 防止上滑頁面也觸發下拉
出現,在頁面上任何位置只要下滑動頁面就會觸發下拉,這類問題。可以使用@scrolltoupper="scrolltoupper"
觸頂函數,在這裡面做一個准入可以解決!
// 触顶操作-准入 scrolltoupper() { this.isAllowRefresh = true } // 自定义下拉刷新控件被下拉 onPulling(e) { if (e.detail.deltaY < 0) return if (!this.isAllowRefresh) return; this.isRefresh = true; console.log("onpulling", e); }登入後複製
也可以使用@scroll="onScroll"
監聽
scroll-top的值,讓其
===0時觸發,也就是到達頂部!再觸發!但遇到其必須滑動一下頁面出現捲軸,他才會監聽!我們可以
init的時候初始化一下,令其變數初始為0!
推薦:《export default class Index extends mixins(uiMixin) { scrollTop: number = 0 // 监听页面是否滚动 onScroll(e) { this.scrollTop = e.detail.scrollTop } // 自定义下拉刷新被触发 onRefresh() { if (this.scrollTop === 0) { if (this._freshing) return; this._freshing = true; this.page++; setTimeout(() => { this.triggered = false; this._freshing = false; this.getData(); }, 500); } } })登入後複製uniapp教學》
以上是uniapp中怎麼使用scrpll-view元件實作下拉刷新的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

在 WebStorm 中啟動 UniApp 專案預覽的步驟:安裝 UniApp 開發工具外掛程式連接到裝置設定 WebSocket啟動預覽

整體而言,需複雜原生功能時,uni-app 較好;需簡單或高度自訂介面時,MUI 較好。此外,uni-app 具備:1. Vue.js/JavaScript 支援;2. 豐富原生組件/API;3. 良好生態系。缺點是:1. 效能問題;2. 客製化介面困難。 MUI 具備:1. Material Design 支援;2. 高度彈性;3. 廣泛元件/主題庫。缺點是:1. CSS 依賴;2. 不提供原生元件;3. 生態系較小。

UniApp使用HBuilder X作為官方開發工具,該IDE整合了程式碼編輯器、偵錯器、模擬器和豐富的插件,為跨平台行動應用程式開發提供全面的支援。

uniapp開發需要以下基礎:前端技術(HTML、CSS、JavaScript)行動開發知識(iOS和Android平台)Node.js其他基礎(版本控制工具、IDE、行動開發模擬器或真機除錯經驗)

UniApp 作為跨平台開發框架擁有許多便利,但缺點也較為明顯:效能受限於混合開發模式,導致開啟速度、頁面渲染和互動回應較差。生態系統不完善,特定領域組件和庫較少,限制創意發揮和複雜功能實現。不同平台的相容性問題,易出現樣式差異和 API 支援不一致的情況。 WebView 的安全機制不同於原生應用,可能降低應用程式安全性。同時支援多個平台的應用程式發布更新需要多次編譯打包,增加開發和維護成本。

在 UniApp 和原生開發之間選擇時,應考慮開發成本、效能、使用者體驗和靈活性。 UniApp 優點在於跨平台開發、快速迭代、易於學習和內建插件,而原生開發則在效能、穩定性、原生體驗和可擴展性方面更勝一籌。根據特定專案需求權衡利弊,初學者適合 UniApp,追求高效能和無縫體驗的複雜應用程式適合原生開發。

UniApp 基於 Vue.js,Flutter 基於 Dart,兩者都支援跨平台開發。 UniApp 提供豐富的元件和簡易開發,但效能受限於 WebView;Flutter 使用原生渲染引擎,效能優異,但開發難度較高。 UniApp 擁有活躍的中文社區,Flutter 擁有龐大且全球化的社區。 UniApp 適合快速開發、效能要求不高的場景;Flutter 適合客製化程度高、高效能的複雜應用。

uniapp 開發小程式推薦的元件庫:uni-ui:uni 官方出品,提供基礎和業務元件。 vant-weapp:位元組跳動出品,擁有簡潔美觀 UI 設計。 taro-ui:京東出品,基於 Taro 框架開發。 fish-design:百度出品,採用 Material Design 設計風格。 naive-ui:有讚出品,現代化 UI 設計,輕量易客製化。
