vue之虚拟滚动

一、解决的问题

对于大量数据的懒加载,我们可以使用虚拟滚动的技术。虚拟滚动的原理是只渲染可视区域内的数据,当用户滚动时,动态计算并渲染新的可视数据,从而实现大数据量的流畅滚动。

在Vue中,我们可以使用第三方库如vue-virtual-scroller来实现虚拟滚动。

二、实现方式

首先,安装vue-virtual-scroller库:

复制代码
npm install vue-virtual-scroller

html

复制代码
<template>
  <div>
    <RecycleScroller
      class="scroller"
      :items="dataList"
      :item-size="30"
      key-field="id"
    >
      <template #default="{ item }">
        <div class="item">
          {{ item.content }}
        </div>
      </template>
    </RecycleScroller>
  </div>
</template>

<script>
import { RecycleScroller } from 'vue-virtual-scroller'
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'

export default {
  components: {
    RecycleScroller
  },
  data() {
    return {
      dataList: []
    }
  },
  created() {
    this.fetchData();
  },
  methods: {
    fetchData() {
      // 调用API接口,获取数据
      axios.get('/api/data')
        .then(response => {
          this.dataList = response.data;
        })
        .catch(error => {
          console.error(error);
        });
    }
  }
}
</script>

<style>
.scroller {
  height: 100%;
  overflow-y: auto;
}

.item {
  height: 30px;
  line-height: 30px;
}
</style>

三、属性api

RecycleScroller组件的主要属性如下:

  • items:数组,需要渲染的数据列表。

  • item-size:数字,每个列表项的大小(高度或宽度)。

  • key-field:字符串,每个列表项的唯一标识字段。

  • page-mode:布尔值,是否使用页面模式。在页面模式下,滚动容器是document.documentElement,否则是RecycleScroller自身。

  • direction:字符串,滚动方向,可以是vertical(垂直)或horizontal(水平)。

  • buffer:数字,渲染缓冲区大小。增大这个值可以减少滚动时的列表项闪烁,但会增加内存占用。

  • prerender:数字,预渲染的列表项数量。

  • emitUpdate:布尔值,是否在列表项更新时触发update事件。

以下是一个RecycleScroller的示例:

复制代码
<RecycleScroller
  class="scroller"
  :items="dataList"
  :item-size="50"
  key-field="id"
  page-mode
  direction="vertical"
  :buffer="200"
  :prerender="10"
  emitUpdate
>
  <template #default="{ item }">
    <div class="item">
      {{ item.content }}
    </div>
  </template>
</RecycleScroller>

以上代码中,RecycleScroller会渲染dataList中的数据,每个列表项的高度是50px,使用页面模式和垂直滚动,渲染缓冲区大小是200px,预渲染10个列表项,并在列表项更新时触发update事件。

相关推荐
其实防守也摸鱼5 分钟前
Codex 下载与本地部署实战指南
linux·服务器·前端·数据库·算法·ai
苏渡苇18 分钟前
从零搭建 Vue 3 工程化项目:Vite + TypeScript + Pinia + Element Plus 实战
前端·vue.js·typescript
雪芽蓝域zzs19 分钟前
第 8 节:距离测量(测距工具)
vue.js
keyipatience21 分钟前
CSS学习(2)|元素显示模式、盒模型、Flex 布局
javascript·css·html·css3
CallFay云起未来22 分钟前
2026年AI客服能不能减少人工回复?从知识检索到人机协同的技术实现
java·大数据·前端·人工智能·架构·文心一言
IT_陈寒25 分钟前
一文搞懂SpringBoot的核心概念
前端·人工智能·后端
棉猴36 分钟前
玩游戏学Python12-布尔型与条件语句
java·前端·python·玩游戏·游戏编程·pgzero
晚枫歌F36 分钟前
dpdk实现arp协议,icmp协议-----架构优化
开发语言·javascript·架构
java_nnnn39 分钟前
Spring Web MVC 入门:从一个 URL 到 Java 后端完整处理请求
java·前端·spring boot·spring
丨白色风车丨1 小时前
LangChain Agent 从入门到实战:创建与调用参数全解析
前端·python·langchain