Infinite Scroll 无限滚动

滚动至底部时,加载更多数据。

基础用法

在要实现滚动加载的列表上上添加v-infinite-scroll,并赋值相应的加载方法,可实现滚动到底部时自动执行加载方法。

Infinite Scroll 无限滚动 - 图1

  1. <template>
  2. <ul v-infinite-scroll="load" class="infinite-list" style="overflow: auto">
  3. <li v-for="i in count" :key="i" class="infinite-list-item">{{ i }}</li>
  4. </ul>
  5. </template>
  6. <script lang="ts" setup>
  7. import { ref } from 'vue'
  8. const count = ref(0)
  9. const load = () => {
  10. count.value += 2
  11. }
  12. </script>
  13. <style>
  14. .infinite-list {
  15. height: 300px;
  16. padding: 0;
  17. margin: 0;
  18. list-style: none;
  19. }
  20. .infinite-list .infinite-list-item {
  21. display: flex;
  22. align-items: center;
  23. justify-content: center;
  24. height: 50px;
  25. background: var(--el-color-primary-light-9);
  26. margin: 10px;
  27. color: var(--el-color-primary);
  28. }
  29. .infinite-list .infinite-list-item + .list-item {
  30. margin-top: 10px;
  31. }
  32. </style>

禁用加载

Infinite Scroll 无限滚动 - 图2

  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>

指令

属性说明类型可选值默认值
v-infinite-scroll滚动到底部时,加载更多数据function--
infinite-scroll-disabled是否禁用boolean-false
infinite-scroll-delay节流时延,单位为msnumber-200
infinite-scroll-distance触发加载的距离阈值,单位为pxnumber-0
infinite-scroll-immediate是否立即执行加载方法,以防初始状态下内容无法撑满容器。boolean-true

源代码

组件 Infinite Scroll 无限滚动 - 图3 文档 Infinite Scroll 无限滚动 - 图4

贡献者

Infinite Scroll 无限滚动 - 图5 三咲智子

Infinite Scroll 无限滚动 - 图6 jeremywu

Infinite Scroll 无限滚动 - 图7 Delyan Haralanov

Infinite Scroll 无限滚动 - 图8 Alan Wang

Infinite Scroll 无限滚动 - 图9 Hades-li

Infinite Scroll 无限滚动 - 图10 赵朋朋Eddie

Infinite Scroll 无限滚动 - 图11 云游君

Infinite Scroll 无限滚动 - 图12 C.Y.Kun