VirtualScroll.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <template>
  2. <PageWrapper class="virtual-scroll-demo">
  3. <Divider>基础滚动示例</Divider>
  4. <div class="virtual-scroll-demo-wrap">
  5. <VScroll :itemHeight="41" :items="data" :height="300" :width="300">
  6. <template #default="{ item }">
  7. <div class="virtual-scroll-demo__item">
  8. {{ item.title }}
  9. </div>
  10. </template>
  11. </VScroll>
  12. </div>
  13. <Divider>即使不可见,也预先加载50条数据,防止空白</Divider>
  14. <div class="virtual-scroll-demo-wrap">
  15. <VScroll :itemHeight="41" :items="data" :height="300" :width="300" :bench="50">
  16. <template #default="{ item }">
  17. <div class="virtual-scroll-demo__item">
  18. {{ item.title }}
  19. </div>
  20. </template>
  21. </VScroll>
  22. </div>
  23. </PageWrapper>
  24. </template>
  25. <script lang="ts" setup>
  26. import { VScroll } from '@/components/VirtualScroll/index';
  27. import { Divider } from 'ant-design-vue';
  28. import { PageWrapper } from '@/components/Page';
  29. const data = (() => {
  30. const arr: any[] = [];
  31. for (let index = 1; index < 20000; index++) {
  32. arr.push({
  33. title: '列表项' + index,
  34. });
  35. }
  36. return arr;
  37. })();
  38. </script>
  39. <style lang="less" scoped>
  40. .virtual-scroll-demo {
  41. &-wrap {
  42. display: flex;
  43. justify-content: center;
  44. margin: 0 30%;
  45. background-color: @component-background;
  46. }
  47. &__item {
  48. height: 40px;
  49. padding: 0 20px;
  50. border-bottom: 1px solid @border-color-base;
  51. line-height: 40px;
  52. }
  53. }
  54. </style>