<style>
.list-container {
height: 400px;
overflow-y: auto;
}
.list-item {
height: 50px;
line-height: 50px;
border-bottom: 1px solid #ccc;
}
</style>
<div class="list-container" id="listContainer">
<div class="list-item" v-for="item in visibleItems" :key="item.id">
{{ item.name }}
</div>
</div>
<script>
const listContainer = document.getElementById('listContainer');
const listItemHeight = 50;
const visibleItemCount = Math.ceil(listContainer.clientHeight / listItemHeight);
let startIndex = 0;
function updateVisibleItems() {
const visibleItems = dataList.slice(startIndex, startIndex + visibleItemCount);
// 更新可见区域的数据
// ...
}
function handleScroll() {
startIndex = Math.floor(listContainer.scrollTop / listItemHeight);
// 更新起始索引
// ...
updateVisibleItems();
}
listContainer.addEventListener('scroll', handleScroll);
// 初始化数据
const dataList = [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' },
// ...
];
updateVisibleItems();
</script>
前端虚拟列表是一种优化技术,用于处理大量数据的列表展示,以提高页面性能和用户体验。其原理是只渲染当前可见区域的数据,而不是将所有数据一次性渲染到页面上。
具体的实现步骤如下:
-
获取列表数据:从后端获取完整的列表数据。
-
计算可见区域:根据列表容器的高度和每个列表项的高度,计算出可见区域可以容纳的列表项数量。
-
渲染可见区域:根据可见区域的数量,只渲染这些列表项到页面上。
-
监听滚动事件:监听列表容器的滚动事件,根据滚动位置动态计算当前可见区域的起始索引。
-
更新可见区域:根据起始索引和可见区域的数量,更新可见区域的数据,并重新渲染到页面上。