disable-loading.vue 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <template>
  2. <div class="infinite-list-wrapper" style="overflow: auto">
  3. <ul
  4. v-infinite-scroll="load"
  5. class="list"
  6. :infinite-scroll-disabled="disabled"
  7. >
  8. <li v-for="i in count" :key="i" class="list-item">{{ i }}</li>
  9. </ul>
  10. <p v-if="loading">Loading...</p>
  11. <p v-if="noMore">No more</p>
  12. </div>
  13. </template>
  14. <script lang="ts" setup>
  15. import { computed, ref } from 'vue'
  16. const count = ref(10)
  17. const loading = ref(false)
  18. const noMore = computed(() => count.value >= 20)
  19. const disabled = computed(() => loading.value || noMore.value)
  20. const load = () => {
  21. loading.value = true
  22. setTimeout(() => {
  23. count.value += 2
  24. loading.value = false
  25. }, 2000)
  26. }
  27. </script>
  28. <style>
  29. .infinite-list-wrapper {
  30. height: 300px;
  31. text-align: center;
  32. }
  33. .infinite-list-wrapper .list {
  34. padding: 0;
  35. margin: 0;
  36. list-style: none;
  37. }
  38. .infinite-list-wrapper .list-item {
  39. display: flex;
  40. align-items: center;
  41. justify-content: center;
  42. height: 50px;
  43. background: var(--el-color-danger-light-9);
  44. color: var(--el-color-danger);
  45. }
  46. .infinite-list-wrapper .list-item + .list-item {
  47. margin-top: 10px;
  48. }
  49. </style>