文件
OmniCard/mpuniapp/pages/component/scroll-view/scroll-view-refresher.uvue

168 行
4.7 KiB
Plaintext

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<template>
<view class="container">
<page-head title="scroll-view 默认下拉刷新"></page-head>
<scroll-view class="scroll" refresher-enabled=true :refresher-triggered="data.refresherTriggered"
@refresherrefresh="onRefresherrefresh" @refresherabort="onRefresherabort" @refresherrestore="onRefresherrestore"
@refresherpulling="onRefresherpulling" @scrolltolower="onScrolltolower" :show-scrollbar="data.showScrollbar">
<view v-for="key in scrollData" :key="key">
<view class="scroll-item">
<text class="scroll-item-title">{{key}}</text>
</view>
</view>
</scroll-view>
</view>
</template>
<script setup lang="uts">
type RefresherEventTest = {
type : string;
target : UniElement | null;
currentTarget : UniElement | null;
dy : number;
}
type DataType = {
refresherTriggered: boolean,
refresherrefreshTimes: number,
showScrollbar: boolean,
refresherrefreshTest: string,
onRefresherabortTest: string,
onRefresherrestoreTest: string,
onRefresherpullingTest: string,
}
const scrollData = ref([] as Array<string>)
const refresherrefresh = ref(false)
const data = reactive({
refresherTriggered: false,
refresherrefreshTimes: 0,
showScrollbar: false,
refresherrefreshTest: "",
onRefresherabortTest: "",
onRefresherrestoreTest: "",
onRefresherpullingTest: "",
} as DataType)
// 自动化测试专用(由于事件event参数对象中存在循环引用,在ios端JSON.stringify报错,自动化测试无法page.data获取)
function checkEventTest(e : RefresherEventTest, eventName : String) {
// #ifndef MP
const isPass = e.type === eventName && e.target instanceof UniElement && e.currentTarget instanceof UniElement && e.dy > 0;
// #endif
// #ifdef MP
const isPass = true
// #endif
const result = isPass ? `${eventName}:Success` : `${eventName}:Fail`;
switch (eventName) {
case 'refresherrefresh':
data.refresherrefreshTest = result
break;
case 'refresherpulling':
data.onRefresherpullingTest = result
break;
case 'refresherrestore':
data.onRefresherrestoreTest = result
break;
case 'refresherabort':
data.onRefresherabortTest = result
break;
default:
break;
}
}
function onRefresherrefresh(e : UniRefresherEvent) {
refresherrefresh.value = true
console.log("onRefresherrefresh------下拉刷新触发")
checkEventTest({
type: e.type,
target: e.target,
currentTarget: e.currentTarget,
dy: e.detail.dy,
} as RefresherEventTest, 'refresherrefresh')
data.refresherTriggered = true
data.refresherrefreshTimes++
setTimeout(() => {
data.refresherTriggered = false
}, 1500)
}
function onRefresherabort(e : UniRefresherEvent) {
console.log("onRefresherabort------下拉刷新被中止")
checkEventTest({
type: e.type,
target: e.target,
currentTarget: e.currentTarget,
dy: e.detail.dy,
} as RefresherEventTest, 'refresherabort')
}
function onRefresherrestore(e : UniRefresherEvent) {
refresherrefresh.value = false
console.log("onRefresherrestore------下拉刷新被复位")
checkEventTest({
type: e.type,
target: e.target,
currentTarget: e.currentTarget,
dy: e.detail.dy,
} as RefresherEventTest, 'refresherrestore')
}
function onRefresherpulling(e : UniRefresherEvent) {
console.log("onRefresherpulling------下拉刷新控件被下拉-dy=" + e.detail.dy)
checkEventTest({
type: e.type,
target: e.target,
currentTarget: e.currentTarget,
dy: e.detail.dy,
} as RefresherEventTest, 'refresherpulling')
}
function onScrolltolower(e : UniScrollToLowerEvent) {
console.log("onScrolltolower 滚动到底部-----" + e.detail.direction)
}
//自动化测试专用
function setPageStyle(pageStyle: UTSJSONObject) {
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
currentPage.setPageStyle(pageStyle);
}
onLoad(() => {
let lists : Array<string> = []
for (let i = 0; i < 20; i++) {
lists.push("item---" + i)
}
scrollData.value = lists
})
defineExpose({
data,
setPageStyle
})
</script>
<style>
.container {
flex: 1;
}
.scroll {
background-color: #eee;
/* position: relative; */
width: 100%;
flex: 1;
/* border-color: red; */
}
.scroll-item {
margin-left: 6px;
margin-right: 6px;
margin-top: 6px;
background-color: #fff;
}
.scroll-item-title {
width: 100%;
height: 60px;
line-height: 60px;
text-align: center;
color: #555;
}
</style>