| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- <template>
- <PageWrapper class="virtual-scroll-demo">
- <Divider>基础滚动示例</Divider>
- <div class="virtual-scroll-demo-wrap">
- <VScroll :itemHeight="41" :items="data" :height="300" :width="300">
- <template #default="{ item }">
- <div class="virtual-scroll-demo__item">
- {{ item.title }}
- </div>
- </template>
- </VScroll>
- </div>
- <Divider>即使不可见,也预先加载50条数据,防止空白</Divider>
- <div class="virtual-scroll-demo-wrap">
- <VScroll :itemHeight="41" :items="data" :height="300" :width="300" :bench="50">
- <template #default="{ item }">
- <div class="virtual-scroll-demo__item">
- {{ item.title }}
- </div>
- </template>
- </VScroll>
- </div>
- </PageWrapper>
- </template>
- <script lang="ts">
- import { defineComponent } from 'vue';
- import { VScroll } from '/@/components/VirtualScroll/index';
- import { Divider } from 'ant-design-vue';
- import { PageWrapper } from '/@/components/Page';
- const data: Recordable[] = (() => {
- const arr: Recordable[] = [];
- for (let index = 1; index < 20000; index++) {
- arr.push({
- title: '列表项' + index,
- });
- }
- return arr;
- })();
- export default defineComponent({
- components: { VScroll: VScroll, Divider, PageWrapper },
- setup() {
- return { data: data };
- },
- });
- </script>
- <style lang="less" scoped>
- .virtual-scroll-demo {
- &-wrap {
- display: flex;
- margin: 0 30%;
- background-color: @component-background;
- justify-content: center;
- }
- &__item {
- height: 40px;
- padding: 0 20px;
- line-height: 40px;
- border-bottom: 1px solid @border-color-base;
- }
- }
- </style>
|