el-table实现虚拟滚动 | 一篇讲清什么是虚拟滚动,该如何实现 | Vue2 | ElementUI
虚拟滚动技术通常用于处理大量数据的列表或表格,以减少内存使用并提高性能。虚拟滚动技术只渲染当前视口内的数据项,当用户滚动时,只有可见的数据项会被渲染和更新。
在Vue2和ElementUI中,可以使用el-table
组件配合第三方库如vue-virtual-scroll-list
或vue-virtual-scroll-tree
来实现虚拟滚动。
以下是一个简单的例子,展示如何在Vue2和ElementUI中使用el-table
实现虚拟滚动:
- 安装依赖库:
npm install vue-virtual-scroll-list
- 在Vue组件中使用
vue-virtual-scroll-list
:
<template>
<virtual-list
class="virtual-list"
:size="itemHeight"
:remain="visibleItemCount"
>
<el-table :data="visibleData" height="400" style="width: 100%">
<el-table-column prop="date" label="日期" width="180"></el-table-column>
<el-table-column prop="name" label="姓名" width="180"></el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
</el-table>
</virtual-list>
</template>
<script>
import { VirtualList } from 'vue-virtual-scroll-list'
export default {
components: {
VirtualList
},
data() {
return {
itemHeight: 50, // 每个数据项的高度
visibleItemCount: 10, // 可视区域能看到的数据项数量
dataList: [], // 完整的数据列表
}
},
computed: {
visibleData() {
// 计算当前可视区域的数据
const start = this.$refs.virtualList.start
const end = this.$refs.virtualList.end
return this.dataList.slice(start, end + 1)
}
},
mounted() {
// 模拟数据填充
this.dataList = new Array(1000).fill(null).map((_, index) => ({
date: '2016-05-02',
name: `John ${index}`,
address: `No. ${index} Lake Park`
}))
}
}
</script>
<style>
.virtual-list {
height: 400px; /* 设置表格的高度 */
overflow-y: auto;
}
</style>
在这个例子中,我们使用了vue-virtual-scroll-list
组件来创建一个虚拟滚动的列表。size
属性定义了每个数据项的高度,remain
属性定义了可视区域内应该渲染的数据项数量。data
属性绑定到了visibleData
计算属性,该属性计算了当前可视区域内的数据项。
这个例子中的dataList
包含了1000个数据项,但是只有可见的数据项会被渲染,虚拟滚动技术通过这种方式提高了性能,减少了内存使用。
评论已关闭