VirtualScroll.vue 1.6 KB

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