scroll-view-refresher.uvue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <template>
  2. <view class="container">
  3. <page-head title="scroll-view 下拉刷新"></page-head>
  4. <scroll-view class="scroll" refresher-enabled=true :refresher-triggered="refresherTriggered"
  5. @refresherrefresh="onRefresherrefresh" @refresherabort="onRefresherabort" @refresherrestore="onRefresherrestore"
  6. @refresherpulling="onRefresherpulling" @scrolltolower="onScrolltolower" :show-scrollbar="showScrollbar">
  7. <view v-for="key in scrollData" :key="key">
  8. <view class="scroll-item">
  9. <text class="scroll-item-title">{{key}}</text>
  10. </view>
  11. </view>
  12. </scroll-view>
  13. </view>
  14. </template>
  15. <script>
  16. type RefresherEventTest = {
  17. type : string;
  18. target : UniElement | null;
  19. currentTarget : UniElement | null;
  20. dy : number;
  21. }
  22. export default {
  23. data() {
  24. return {
  25. scrollData: [] as Array<string>,
  26. refresherTriggered: false,
  27. refresherrefresh: false,
  28. refresherrefreshTimes: 0,
  29. showScrollbar: false,
  30. // 自动化测试使用
  31. refresherrefreshTest: "",
  32. onRefresherabortTest: "",
  33. onRefresherrestoreTest: "",
  34. onRefresherpullingTest: ""
  35. };
  36. },
  37. onLoad() {
  38. let lists : Array<string> = []
  39. for (let i = 0; i < 20; i++) {
  40. lists.push("item---" + i)
  41. }
  42. this.scrollData = lists
  43. },
  44. methods: {
  45. onRefresherrefresh(e : UniRefresherEvent) {
  46. this.refresherrefresh = true
  47. console.log("onRefresherrefresh------下拉刷新触发")
  48. this.checkEventTest({
  49. type: e.type,
  50. target: e.target,
  51. currentTarget: e.currentTarget,
  52. dy: e.detail.dy,
  53. } as RefresherEventTest, 'refresherrefresh')
  54. this.refresherTriggered = true
  55. this.refresherrefreshTimes++
  56. setTimeout(() => {
  57. this.refresherTriggered = false
  58. }, 1500)
  59. },
  60. onRefresherabort(e : UniRefresherEvent) {
  61. console.log("onRefresherabort------下拉刷新被中止")
  62. this.checkEventTest({
  63. type: e.type,
  64. target: e.target,
  65. currentTarget: e.currentTarget,
  66. dy: e.detail.dy,
  67. } as RefresherEventTest, 'refresherabort')
  68. },
  69. onRefresherrestore(e : UniRefresherEvent) {
  70. this.refresherrefresh = false
  71. console.log("onRefresherrestore------下拉刷新被复位")
  72. this.checkEventTest({
  73. type: e.type,
  74. target: e.target,
  75. currentTarget: e.currentTarget,
  76. dy: e.detail.dy,
  77. } as RefresherEventTest, 'refresherrestore')
  78. },
  79. onRefresherpulling(e : UniRefresherEvent) {
  80. console.log("onRefresherpulling------拉刷新控件被下拉-dy=" + e.detail.dy)
  81. this.checkEventTest({
  82. type: e.type,
  83. target: e.target,
  84. currentTarget: e.currentTarget,
  85. dy: e.detail.dy,
  86. } as RefresherEventTest, 'refresherpulling')
  87. },
  88. onScrolltolower(e : UniScrollToLowerEvent) {
  89. console.log("onScrolltolower 滚动到底部-----" + e.detail.direction)
  90. },
  91. // 自动化测试专用(由于事件event参数对象中存在循环引用,在ios端JSON.stringify报错,自动化测试无法page.data获取)
  92. checkEventTest(e : RefresherEventTest, eventName : String) {
  93. // #ifndef MP
  94. const isPass = e.type === eventName && e.target instanceof UniElement && e.currentTarget instanceof UniElement && e.dy > 0;
  95. // #endif
  96. // #ifdef MP
  97. const isPass = true
  98. // #endif
  99. const result = isPass ? `${eventName}:Success` : `${eventName}:Fail`;
  100. switch (eventName) {
  101. case 'refresherrefresh':
  102. this.refresherrefreshTest = result
  103. break;
  104. case 'refresherpulling':
  105. this.onRefresherpullingTest = result
  106. break;
  107. case 'refresherrestore':
  108. this.onRefresherrestoreTest = result
  109. break;
  110. case 'refresherabort':
  111. this.onRefresherabortTest = result
  112. break;
  113. default:
  114. break;
  115. }
  116. },
  117. //自动化测试专用
  118. setPageStyle(pageStyle: UTSJSONObject) {
  119. const pages = getCurrentPages();
  120. const currentPage = pages[pages.length - 1];
  121. currentPage.setPageStyle(pageStyle);
  122. }
  123. }
  124. };
  125. </script>
  126. <style>
  127. .container {
  128. display: flex;
  129. flex-direction: column;
  130. flex: 1;
  131. }
  132. .scroll {
  133. background-color: #eee;
  134. position: relative;
  135. width: 100%;
  136. flex: 1;
  137. display: flex;
  138. flex-direction: column;
  139. border-color: red;
  140. border-radius: 6px;
  141. }
  142. .scroll-item {
  143. margin-left: 6px;
  144. margin-right: 6px;
  145. margin-top: 6px;
  146. background-color: #fff;
  147. border-radius: 4px;
  148. }
  149. .scroll-item-title {
  150. width: 100%;
  151. height: 60px;
  152. line-height: 60px;
  153. text-align: center;
  154. color: #555;
  155. }
  156. </style>