VirtualScroll.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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">
  26. import { defineComponent } from 'vue';
  27. import { VScroll } from '/@/components/VirtualScroll/index';
  28. import { Divider } from 'ant-design-vue';
  29. import { PageWrapper } from '/@/components/Page';
  30. const data: Recordable[] = (() => {
  31. const arr: Recordable[] = [];
  32. for (let index = 1; index < 20000; index++) {
  33. arr.push({
  34. title: '列表项' + index,
  35. });
  36. }
  37. return arr;
  38. })();
  39. export default defineComponent({
  40. components: { VScroll: VScroll, Divider, PageWrapper },
  41. setup() {
  42. return { data: data };
  43. },
  44. });
  45. </script>
  46. <style lang="less" scoped>
  47. .virtual-scroll-demo {
  48. &-wrap {
  49. display: flex;
  50. margin: 0 30%;
  51. background-color: @component-background;
  52. justify-content: center;
  53. }
  54. &__item {
  55. height: 40px;
  56. padding: 0 20px;
  57. line-height: 40px;
  58. border-bottom: 1px solid @border-color-base;
  59. }
  60. }
  61. </style>