scroll-view.uvue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <template>
  2. <!-- #ifdef APP -->
  3. <scroll-view class="page-scroll-view">
  4. <!-- #endif -->
  5. <view>
  6. <page-head title="scroll-view,区域滚动视图"></page-head>
  7. <view class="uni-padding-wrap uni-common-mt">
  8. <view class="uni-title uni-common-mt">
  9. <text class="uni-title-text">Vertical Scroll</text>
  10. <text class="uni-subtitle-text">纵向滚动</text>
  11. </view>
  12. <view>
  13. <scroll-view :scroll-top="scrollTop" direction="vertical" class="scroll-Y" scroll-with-animation="true"
  14. @scrolltoupper="upper" @scrolltolower="lower" @scroll="scroll" @scrollend="end"
  15. :show-scrollbar="showScrollbar" id="verticalScrollView">
  16. <view class="scroll-view-item uni-bg-red"><text class="text">A</text></view>
  17. <view class="scroll-view-item uni-bg-green"><text class="text">B</text></view>
  18. <view class="scroll-view-item uni-bg-blue"><text class="text">C</text></view>
  19. </scroll-view>
  20. </view>
  21. <view @tap="goTop" class="uni-center uni-common-mt">
  22. <text class="uni-link">点击这里返回顶部</text>
  23. </view>
  24. <view class="uni-title uni-common-mt">
  25. <text class="uni-title-text">Horizontal Scroll</text>
  26. <text class="uni-subtitle-text">横向滚动</text>
  27. </view>
  28. <view>
  29. <scroll-view class="scroll-view_H" direction="horizontal" @scroll="scroll" @scrollend="end"
  30. :scroll-left="scrollLeft" :show-scrollbar="showScrollbar">
  31. <view class="scroll-view-item_H uni-bg-red"><text class="text">A</text></view>
  32. <view class="scroll-view-item_H uni-bg-green"><text class="text">B</text></view>
  33. <view class="scroll-view-item_H uni-bg-blue"><text class="text">C</text></view>
  34. </scroll-view>
  35. </view>
  36. <navigator url="/pages/component/scroll-view/scroll-view-props" hover-class="none">
  37. <button type="primary" class="button">
  38. 非下拉刷新的属性示例
  39. </button>
  40. </navigator>
  41. <view class="uni-common-pb"></view>
  42. <navigator url="/pages/component/scroll-view/scroll-view-refresher-props" hover-class="none">
  43. <button type="primary" class="button">
  44. 下拉刷新的属性示例
  45. </button>
  46. </navigator>
  47. <view class="uni-common-pb"></view>
  48. <navigator url="/pages/component/scroll-view/scroll-view-refresher" hover-class="none">
  49. <button type="primary" class="button"> 默认下拉刷新示例 </button>
  50. </navigator>
  51. <view class="uni-common-pb"></view>
  52. <navigator url="/pages/component/scroll-view/scroll-view-custom-refresher-props" hover-class="none">
  53. <button type="primary" class="button">
  54. 自定义下拉刷新示例
  55. </button>
  56. </navigator>
  57. <view class="uni-common-pb"></view>
  58. </view>
  59. </view>
  60. <!-- #ifdef APP -->
  61. </scroll-view>
  62. <!-- #endif -->
  63. </template>
  64. <script lang="uts">
  65. type ScrollEventTest = {
  66. type : string;
  67. target : UniElement | null;
  68. currentTarget : UniElement | null;
  69. direction ?: string
  70. }
  71. export default {
  72. data() {
  73. return {
  74. scrollTop: 0,
  75. oldScrollTop: 0,
  76. scrollLeft: 120,
  77. showScrollbar: true,
  78. // 自动化测试
  79. isScrollTest: '',
  80. isScrolltolowerTest: '',
  81. isScrolltoupperTest: '',
  82. scrollDetailTest: null as UniScrollEventDetail | null,
  83. scrollEndDetailTest: null as UniScrollEventDetail | null,
  84. }
  85. },
  86. methods: {
  87. upper: function (e : UniScrollToUpperEvent) {
  88. console.log('滚动到顶部/左边', e)
  89. this.checkEventTest({
  90. type: e.type,
  91. target: e.target,
  92. currentTarget: e.currentTarget,
  93. direction: e.detail.direction,
  94. } as ScrollEventTest, 'scrolltoupper')
  95. },
  96. lower: function (e : UniScrollToLowerEvent) {
  97. console.log('滚动到底部/右边', e)
  98. this.checkEventTest({
  99. type: e.type,
  100. target: e.target,
  101. currentTarget: e.currentTarget,
  102. direction: e.detail.direction,
  103. } as ScrollEventTest, 'scrolltolower')
  104. },
  105. scroll: function (e : UniScrollEvent) {
  106. this.scrollDetailTest = e.detail
  107. this.checkEventTest({
  108. type: e.type,
  109. target: e.target,
  110. currentTarget: e.currentTarget
  111. } as ScrollEventTest, 'scroll')
  112. this.oldScrollTop = e.detail.scrollTop
  113. },
  114. end: function (e : UniScrollEvent) {
  115. console.log('滚动结束时触发', e)
  116. this.scrollEndDetailTest = e.detail
  117. this.checkEventTest({
  118. type: e.type,
  119. target: e.target,
  120. currentTarget: e.currentTarget
  121. } as ScrollEventTest, 'scrollend')
  122. },
  123. goTop: function () {
  124. // 解决view层不同步的问题
  125. this.scrollTop = this.oldScrollTop
  126. this.$nextTick(() => {
  127. this.scrollTop = 0
  128. })
  129. uni.showToast({
  130. icon: 'none',
  131. title: '纵向滚动 scrollTop 值已被修改为 0',
  132. })
  133. },
  134. // 自动化测试专用(由于事件event参数对象中存在循环引用,在ios端JSON.stringify报错,自动化测试无法page.data获取)
  135. checkEventTest(e : ScrollEventTest, eventName : String) {
  136. // #ifndef MP
  137. const isPass = e.type === eventName && e.target instanceof UniElement && e.currentTarget instanceof UniElement;
  138. // #endif
  139. // #ifdef MP
  140. const isPass = true
  141. // #endif
  142. const result = isPass ? `${eventName}:Success` : `${eventName}:Fail`;
  143. switch (eventName) {
  144. case 'scroll':
  145. this.isScrollTest = result
  146. break;
  147. case 'scrolltolower':
  148. this.isScrolltolowerTest = result + `-${e.direction}`
  149. break;
  150. case 'scrolltoupper':
  151. this.isScrolltoupperTest = result + `-${e.direction}`
  152. break;
  153. default:
  154. break;
  155. }
  156. },
  157. // 自动化测试专用
  158. setVerticalScrollBy(y : number) {
  159. const element = uni.getElementById("verticalScrollView")
  160. if (element != null) {
  161. element.scrollBy(0, y)
  162. }
  163. }
  164. },
  165. }
  166. </script>
  167. <style>
  168. .scroll-Y {
  169. height: 150px;
  170. }
  171. .scroll-view_H {
  172. width: 100%;
  173. flex-direction: row;
  174. }
  175. .scroll-view-item {
  176. height: 150px;
  177. justify-content: center;
  178. align-items: center;
  179. }
  180. .scroll-view-item_H {
  181. width: 100%;
  182. height: 150px;
  183. justify-content: center;
  184. align-items: center;
  185. }
  186. .text {
  187. font-size: 18px;
  188. color: #ffffff;
  189. }
  190. .button {
  191. margin-top: 15px;
  192. }
  193. </style>