disable-loading.vue 1.2 KB

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