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事件。

相关推荐
KaMeidebaby44 分钟前
卡梅德生物技术快报|抗体筛选:抗体筛选中的噬菌体展示四参数调优——从流程设计到数据验证
开发语言·前端·javascript
甲维斯1 小时前
Opus5.0首测,瘫坐沙发!效果,时间,token皆无敌!
前端·人工智能
LVZ1 小时前
Skill + PVM 绝了,AI 直接帮你搞定环境问题了
前端
颜进强1 小时前
从零搭建私人 RAG 知识库:让项目决策真正“可检索、可追溯”
前端·后端·ai编程
颜进强1 小时前
Embedding 模型介绍:热门模型对比与应用场景
前端·后端·ai编程
颜进强1 小时前
LanceDB 基础使用:用 TypeScript 完成第一次向量检索
前端·后端·ai编程
xyphf_和派孔明1 小时前
企业级微前端项目完整创建步骤,第二步:配置主应用
前端
默_笙1 小时前
🔑 让 AI 学会"读"网页:我用 Cheerio 爬了一篇掘金文章,然后切成小块存进了向量库
前端·javascript
颜进强1 小时前
Ollama 从入门到实践:本地模型运行、API 调用
前端·后端·ai编程
颜进强1 小时前
Embedding 基础使用:用 Ollama 和 LangChain.js 生成文本向量
前端·后端·ai编程