文件
OmniCard/mpuniapp/pages/uni-ui/refresh-box/refresh-box.uvue

281 行
7.2 KiB
Plaintext

<template>
<view style="flex: 1;">
<scroll-view
style="flex: 1;"
:refresher-enabled="true"
:refresher-triggered="data.refreshing1"
refresher-default-style="none"
:refresher-threshold="45"
refresher-max-drag-distance="200px"
@refresherpulling="onRefresherpulling1"
@refresherrefresh="onRefresherrefresh1"
@refresherrestore="onRefresherrestore1"
@refresherabort="onRefresherabort1"
> <!-- TODO Android不支持bool属性,:refresher-enabled="true" 不能简写为 refresher-enabled -->
<!-- 列表内容 -->
<view v-for="i in data.listCount1" :key="i" class="content-item">
<text class="text">item-{{ i }}</text>
</view>
<!-- refresher 插槽使用 uni-refresh-box 组件 -->
<uni-refresh-box
slot="refresher"
:pulling-distance="data.pullingDistance1"
:refreshing="data.refreshing1"
></uni-refresh-box> <!-- TODO web只认在组件外层使用slot="refresher",不支持组件内根元素使用-->
</scroll-view>
<text class="section-label">竖排暗黑自定义文字的下拉设置</text>
<scroll-view
style="flex: 1;background-color: black;"
:refresher-enabled="true"
:refresher-triggered="data.refreshing2"
refresher-default-style="none"
:refresher-threshold="45"
refresher-max-drag-distance="200px"
@refresherpulling="onRefresherpulling2"
@refresherrefresh="onRefresherrefresh2"
@refresherrestore="onRefresherrestore2"
@refresherabort="onRefresherabort2"
>
<!-- 列表内容 -->
<view v-for="i in data.listCount2" :key="i" class="content-item">
<text class="text">item-{{ i }}</text>
</view>
<!-- refresher 插槽使用 uni-refresh-box 组件 -->
<uni-refresh-box
slot="refresher"
:pulling-distance="data.pullingDistance2"
:refreshing="data.refreshing2"
loading-class="loading-dark"
text-class="text-dark"
style="flex-direction: column;height: 46px;padding-top: 6px;"
pulling-text="继续下拉可刷新"
loosing-text="释放后会刷新"
loading-text="奋力加载中..."
></uni-refresh-box>
</scroll-view>
<text class="section-label">slot自定义下拉图标</text>
<scroll-view
style="flex: 1;"
:refresher-enabled="true"
:refresher-triggered="data.refreshing3"
refresher-default-style="none"
:refresher-threshold="45"
refresher-max-drag-distance="200px"
@refresherpulling="onRefresherpulling3"
@refresherrefresh="onRefresherrefresh3"
@refresherrestore="onRefresherrestore3"
@refresherabort="onRefresherabort3"
>
<!-- 列表内容 -->
<view v-for="i in data.listCount3" :key="i" class="content-item">
<text class="text">item-{{ i }}</text>
</view>
<!-- refresher 插槽使用 uni-refresh-box 组件 -->
<uni-refresh-box
slot="refresher"
:pulling-distance="data.pullingDistance3"
:refreshing="data.refreshing3"
>
<template #loading="{ state }">
<image
v-if="state == 2"
src="https://web-ext-storage.dcloud.net.cn/hello-uni-app-x/refresh-box-run.gif"
style="width: 20px; height: 20px;"
/> <!-- 刷新中的动图-->
<image
v-else
src="https://web-ext-storage.dcloud.net.cn/hello-uni-app-x/refresh-box-run.gif"
style="width: 20px; height: 20px;"
/> <!-- 非刷新中的图,可以和刷新中的图是一张,也可以分开-->
</template>
<!-- <image src="https://web-ext-storage.dcloud.net.cn/hello-uni-app-x/refresh-box-run.gif" style="width:20px;height:20px;"></image> -->
</uni-refresh-box>
</scroll-view>
<text class="section-label">无文字,纯loading</text>
<scroll-view
style="flex: 1;"
:refresher-enabled="true"
:refresher-triggered="data.refreshing4"
refresher-default-style="none"
:refresher-threshold="45"
refresher-max-drag-distance="200px"
@refresherpulling="onRefresherpulling4"
@refresherrefresh="onRefresherrefresh4"
@refresherrestore="onRefresherrestore4"
@refresherabort="onRefresherabort4"
>
<!-- 列表内容 -->
<view v-for="i in data.listCount4" :key="i" class="content-item">
<text class="text">item-{{ i }}</text>
</view>
<!-- refresher 插槽使用 uni-refresh-box 组件 -->
<uni-refresh-box
slot="refresher"
:pulling-distance="data.pullingDistance4"
:refreshing="data.refreshing4"
pulling-text=""
loosing-text=""
loading-text=""
loading-class="loading-big-font"
></uni-refresh-box>
</scroll-view>
</view>
</template>
<script setup lang="uts">
type Data = {
listCount1: number
refreshing1: boolean
pullingDistance1: number
listCount2: number
refreshing2: boolean
pullingDistance2: number
listCount3: number
refreshing3: boolean
pullingDistance3: number
listCount4: number
refreshing4: boolean
pullingDistance4: number
}
const data = reactive<Data>({
listCount1: 3,
refreshing1: false,
pullingDistance1: 0,
listCount2: 3,
refreshing2: false,
pullingDistance2: 0,
listCount3: 3,
refreshing3: false,
pullingDistance3: 0,
listCount4: 3,
refreshing4: false,
pullingDistance4: 0
})
function onRefresherpulling1(e: RefresherEvent) {
data.pullingDistance1 = e.detail.dy
}
function onRefresherrefresh1() {
data.refreshing1 = true
console.log('列表1 触发刷新')
setTimeout(() => {
data.listCount1 += 5
data.refreshing1 = false
console.log('列表1 刷新完成')
}, 1500)
}
function onRefresherrestore1() {
data.pullingDistance1 = 0
}
function onRefresherabort1() {
data.pullingDistance1 = 0
}
function onRefresherpulling2(e: RefresherEvent) {
data.pullingDistance2 = e.detail.dy
}
function onRefresherrefresh2() {
data.refreshing2 = true
console.log('列表2 触发刷新')
setTimeout(() => {
data.listCount2 += 5
data.refreshing2 = false
console.log('列表2 刷新完成')
}, 1500)
}
function onRefresherrestore2() {
data.pullingDistance2 = 0
}
function onRefresherabort2() {
data.pullingDistance2 = 0
}
function onRefresherpulling3(e: RefresherEvent) {
data.pullingDistance3 = e.detail.dy
}
function onRefresherrefresh3() {
data.refreshing3 = true
console.log('列表3 触发刷新')
setTimeout(() => {
data.listCount3 += 5
data.refreshing3 = false
console.log('列表3 刷新完成')
}, 1500)
}
function onRefresherrestore3() {
data.pullingDistance3 = 0
}
function onRefresherabort3() {
data.pullingDistance3 = 0
}
function onRefresherpulling4(e: RefresherEvent) {
data.pullingDistance4 = e.detail.dy
}
function onRefresherrefresh4() {
data.refreshing4 = true
console.log('列表4 触发刷新')
setTimeout(() => {
data.listCount4 += 5
data.refreshing4 = false
console.log('列表4 刷新完成')
}, 1500)
}
function onRefresherrestore4() {
data.pullingDistance4 = 0
}
function onRefresherabort4() {
data.pullingDistance4 = 0
}
defineExpose({
data
})
</script>
<style>
.section-label {
margin: 5px;
color: var(--text-color, #333333);
}
.content-item {
margin: 5px 10px;
}
.text {
color: var(--text-color, #333333);
font-size: 14px;
}
.loading-dark{
border-color:white;
width: 20px;
height: 20px;
}
.text-dark{
color: white;
margin-top: 5px;
}
.loading-big-font{
width: 24px;
height: 24px;
}
</style>