custom-refresher.uvue 2.2 KB
Newer Older
1 2 3 4
<template>
  <list-view class="list-view" :refresher-enabled="true" :refresher-triggered="refresherTriggered"
    refresher-default-style="none" @refresherpulling="onRefresherpulling" @refresherrefresh="onRefresherrefresh"
    @refresherrestore="onRefreshrestore" :refresher-threshold="refresherThreshold" refresher-max-drag-distance="200px">
shutao-dc's avatar
shutao-dc 已提交
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
    <sticky-header>
      <view class="header">
        <text>sticky header</text>
      </view>
    </sticky-header>
    <list-item v-for="i in 20" class="content-item">
      <text class="text">item-{{i}}</text>
    </list-item>
    <refresh-box slot="refresher" :state="state" :pullingDistance="pullingDistance"></refresh-box>
  </list-view>
</template>

<script>
  import refreshBox from './refresh-box/refresh-box.uvue';
  export default {
    components: { refreshBox },
    data() {
      return {
        refresherTriggered: false,
        refresherThreshold: 40,
        pullingDistance: 0,
        resetting: false
      }
    },
    computed: {
      state() : number {
        if (this.resetting) {
          return 3;
        }
        if (this.refresherTriggered) {
          return 2
        }
        if (this.pullingDistance > this.refresherThreshold) {
          return 1
        } else {
          return 0
        }
      }
    },
    methods: {
      onRefresherpulling(e : RefresherEvent) {
        // console.log('onRefresherpulling',e.detail.dy)
        this.pullingDistance = e.detail.dy
      },
      onRefresherrefresh() {
        this.refresherTriggered = true
        setTimeout(() => {
          this.refresherTriggered = false
          this.resetting = true
        }, 1500)
      },
      onRefreshrestore() {
        this.pullingDistance = 0
        this.resetting = false;
60
      }
61 62 63 64 65
    }
  }
</script>

<style>
66 67 68 69
  .list-view {
    flex: 1;
    background-color: #f5f5f5;
  }
xuty73419315's avatar
xuty73419315 已提交
70

71 72 73 74 75 76 77 78 79 80 81 82 83
  .header {
    justify-content: center;
    height: 50px;
    background-color: #f5f5f5;
    padding: 15px;
  }

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

85 86 87 88 89
  .text {
    font-size: 14px;
    color: #666;
    line-height: 20px;
  }
xuty73419315's avatar
xuty73419315 已提交
90
</style>