9433cfb9创建于 2025年12月31日历史提交
<template>
  <view style="overflow: visible; flex: 1;">
    <page-head title="list-view 下拉刷新"></page-head>
    <scroll-view style="flex:1;" :refresher-enabled="true" :refresher-triggered="refresherTriggered"
      refresher-default-style="none" @refresherpulling="onRefresherpulling" @refresherrefresh="onRefresherrefresh"
      @refresherrestore="onRefreshrestore" refresher-max-drag-distance="200px">
      <view style="height: 25px;"></view>
      <view v-for="i in listCount" class="content-item">
        <text class="text">item-{{i}}</text>
      </view>
      <refresh-box slot="refresher" :state="state"></refresh-box>
    </scroll-view>
  </view>
</template>

<script>
  import refreshBox from './refresh-box/refresh-box.uvue';
  export default {
    components: { refreshBox },
    data() {
      return {
        listCount : 20,
        refresherTriggered: false,
        pullingDistance: 0,
        resetting: false,
        triggered: false
      }
    },
    computed: {
      state() : number {
        if (this.resetting) {
          return 3;
        }
        if (this.refresherTriggered) {
          return 2
        }
        if (this.pullingDistance > 45) {
          return 1
        } else {
          return 0;
        }
      }
    },
    methods: {
      onRefresherpulling(e : RefresherEvent) {
        this.pullingDistance = e.detail.dy;
        this.triggered = true;
      },
      onRefresherrefresh() {
        this.refresherTriggered = true
        setTimeout(() => {
          this.refresherTriggered = false
          this.resetting = true;
        }, 1500)
      },
      onRefreshrestore() {
        this.pullingDistance = 0
        this.resetting = false;
      }
    }
  }
</script>

<style>
  .content-item {
    padding: 15px;
    margin: 5px 0;
    background-color: #fff;
    border-radius: 5px;
  }

  .text {
    font-size: 14px;
    color: #666;
    line-height: 20px;
  }
</style>