scroll-view-custom-refresher-props.uvue 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <template>
  2. <view style="overflow: visible; flex: 1;">
  3. <page-head title="list-view 下拉刷新"></page-head>
  4. <scroll-view style="flex:1;" :refresher-enabled="true" :refresher-triggered="refresherTriggered"
  5. refresher-default-style="none" @refresherpulling="onRefresherpulling" @refresherrefresh="onRefresherrefresh"
  6. @refresherrestore="onRefreshrestore" refresher-max-drag-distance="200px">
  7. <view style="height: 25px;"></view>
  8. <view v-for="i in listCount" class="content-item">
  9. <text class="text">item-{{i}}</text>
  10. </view>
  11. <refresh-box slot="refresher" :state="state"></refresh-box>
  12. </scroll-view>
  13. </view>
  14. </template>
  15. <script>
  16. import refreshBox from './refresh-box/refresh-box.uvue';
  17. export default {
  18. components: { refreshBox },
  19. data() {
  20. return {
  21. listCount : 20,
  22. refresherTriggered: false,
  23. pullingDistance: 0,
  24. resetting: false,
  25. triggered: false
  26. }
  27. },
  28. computed: {
  29. state() : number {
  30. if (this.resetting) {
  31. return 3;
  32. }
  33. if (this.refresherTriggered) {
  34. return 2
  35. }
  36. if (this.pullingDistance > 45) {
  37. return 1
  38. } else {
  39. return 0;
  40. }
  41. }
  42. },
  43. methods: {
  44. onRefresherpulling(e : RefresherEvent) {
  45. this.pullingDistance = e.detail.dy;
  46. this.triggered = true;
  47. },
  48. onRefresherrefresh() {
  49. this.refresherTriggered = true
  50. setTimeout(() => {
  51. this.refresherTriggered = false
  52. this.resetting = true;
  53. }, 1500)
  54. },
  55. onRefreshrestore() {
  56. this.pullingDistance = 0
  57. this.resetting = false;
  58. }
  59. }
  60. }
  61. </script>
  62. <style>
  63. .content-item {
  64. padding: 15px;
  65. margin: 5px 0;
  66. background-color: #fff;
  67. border-radius: 5px;
  68. }
  69. .text {
  70. font-size: 14px;
  71. color: #666;
  72. line-height: 20px;
  73. }
  74. </style>