en-scroll.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <template>
  2. <view>
  3. <scroll-view class="main" :style="{height:`calc(100vh - ${$tools.topHeight()+navHeight+tabHeight}px)`}"
  4. scroll-y="true" refresher-enabled="true" :refresher-triggered="triggered" :refresher-threshold="45"
  5. refresher-background="lightgreen" @refresherpulling="onPulling" @refresherrefresh="onRefresh"
  6. @refresherrestore="onRestore" @refresherabort="onAbort" @scrolltolower="onScrolltolower">
  7. <!-- 自定义样式时设置 refresher-default-style="none" -->
  8. <view slot="refresher">刷新样式</view>
  9. <slot></slot>
  10. </scroll-view>
  11. </view>
  12. </template>
  13. <script>
  14. export default {
  15. props: {
  16. navHeight: {
  17. type: Number,
  18. default: 0
  19. },
  20. is_tabHeight: {
  21. type: Boolean,
  22. default: false
  23. },
  24. },
  25. data() {
  26. return {
  27. triggered: false,
  28. // 底部tab高度
  29. tabHeight: uni.getStorageSync('tab_height'),
  30. }
  31. },
  32. created() {
  33. this.tabHeight = this.is_tabHeight ? this.tabHeight : 0
  34. },
  35. onLoad() {
  36. // this._freshing = false;
  37. // setTimeout(() => {
  38. // this.triggered = true;
  39. // }, 1000)
  40. },
  41. methods: {
  42. // 自定义下拉刷新控件被下拉
  43. onPulling(e) {
  44. if (e.detail.deltaY < 0) {
  45. return
  46. }
  47. this.triggered = true
  48. },
  49. // 触发下拉刷新
  50. onRefresh() {
  51. if (this._freshing) return;
  52. this._freshing = true;
  53. this.$emit('onRefresh')
  54. },
  55. // 数据加载结束
  56. onEndPulling() {
  57. this.triggered = false;
  58. this._freshing = false;
  59. },
  60. // 重置下拉
  61. onRestore() {
  62. this.triggered = 'restore';
  63. },
  64. // 下拉被中止
  65. onAbort() {
  66. this.triggered = false;
  67. this._freshing = false;
  68. },
  69. // 滚动到底部
  70. onScrolltolower() {
  71. this.$emit('onScrollBottom')
  72. }
  73. }
  74. }
  75. </script>
  76. <style lang="scss" scoped>
  77. </style>