en-scroll.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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="#EEF1F7" @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. methods: {
  36. // 自定义下拉刷新控件被下拉
  37. onPulling(e) {
  38. if (e.detail.deltaY < 0) {
  39. return
  40. }
  41. this.triggered = true
  42. },
  43. // 触发下拉刷新
  44. onRefresh() {
  45. if (this._freshing) return;
  46. this._freshing = true;
  47. this.$emit('onRefresh')
  48. },
  49. // 数据加载结束
  50. onEndPulling() {
  51. this.triggered = false;
  52. this._freshing = false;
  53. },
  54. // 重置下拉
  55. onRestore() {
  56. this.triggered = 'restore';
  57. },
  58. // 下拉被中止
  59. onAbort() {
  60. this.triggered = false;
  61. this._freshing = false;
  62. },
  63. // 滚动到底部
  64. onScrolltolower() {
  65. this.$emit('onScrollBottom')
  66. }
  67. }
  68. }
  69. </script>
  70. <style lang="scss" scoped>
  71. </style>