万条数据同时渲染卡顿问题解决(vue-virtual-scroller)

本文介绍了如何在Vue应用中使用vue-virtual-scroller库来实现高效的列表渲染,包括计算显示区域大小、动态生成DOM元素以及RecycleScroller组件的配置和使用方法。着重提到了设置item-size和buffer的重要性,以及在vue3中的应用示例。
摘要由CSDN通过智能技术生成

原理

计算显示区域的高度(或宽度) 和显示区域的起始位置(scrollTop或scrollLeft)
根据每个元素的尺寸和总数目,计算出整个列表的高度(或宽度)
显示区域的高度(或宽度)和每个元素的尺寸,计算出一页能够显示的元素的数量(即动态计算了可视区域可以显示多少个元素)
根据当前显示区域的起始位置(scrollTop或scrollLeft),计算出当前显示区域应该实际显示哪些元素
根据计算出的元素列表,动态生成DOM元素并渲染到页面
当滚动时,根据当前的滚动位置,重新计算需要显示哪些元素,并根据添加或删除元素

安装及说明

npm i vue-virtual-scroller

然后再main.js中导入,注册使用

import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
import VueVirtualScroller from 'vue-virtual-scroller'
Vue.use(VueVirtualScroller)

组件使用说明

vue-virtual-scroller 中包含这几个组件,具体都能做什么可以看官方文档,这里只介绍 RecycleScroller

注意!: 这里需要特别注意, recycle-scroller 组件必须设置高度,自己计算好item宽高。

<!-- 查询列表 -->
        <RecycleScroller
          v-if="tableData.length"
          class="virtual-list"
          :buffer="1000"
          :prerender="100"
          style="height: 100%"
          :item-size="30"
          key-field="itemId"
          :items="tableData"
        >
          <template slot-scope="{ item, index }">
            <div
              :title="item.name"
              class="list-item"
              :key="index"
              @click="handleNodeClick(item, index)"
              :style="{
                backgroundColor: tableIndex === index ? '#f0f7ff' : '',
              }"
            >
              <i
                :class="
                  item.type.code == 1 ? 'el-icon-user' : 'el-icon-folder-opened'
                "
                :style="{
                  color: item.type.code == 1 ? '#6fca6f' : '#3c8fd6',
                  fontSize: '20px',
                }"
              ></i>
              <div class="itemName">{{ item.name }}</div>
            </div>
          </template>
        </RecycleScroller>
        <el-empty
          description="未查询到数据"
          v-if="datainfo.keyword && !tableData.length"
        ></el-empty>

效果如下
在这里插入图片描述

RecycleScroller的属性如下

prop解释
item-size元素高度,默认:null,需要设置这个高度,不然好像也会出错
item数组,列表数据源,主角
buffer加到可视区域上下的像素高度,可以适当调大,避免滚动出现的空白
key-field默认标识每行用的标识字段,默认是 id,如果你的 items 数据里没有 id,就自己想办法了,可以自己将源数据生成并添加第一行的唯一 id

vue3 使用 vue-virtual-scroller

npm i vue-virtual-scroller@next

main.js

import "vue-virtual-scroller/dist/vue-virtual-scroller.css" // 引入它的 css
import VueVirtualScroller from "vue-virtual-scroller" // 引入
app.use(VueVirtualScroller) // use 

无缝滚动 vue-seamless-scroll 滚动表格
点击跳转

api文档

api文档

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值