勇者如龙 发表于 2024-11-26 01:10:50

Element-plus表格数据延迟加载的实现方案

在前端展示数据量过大的表格时,会出现加载卡顿问题。
目前业务场景(加载数据量过五万条的数据在表格中展示)
解决方案:延迟加载,设置加载数量,首先加载展示一定数量的数据,监听表格的滚动条事件,当滚动到可视化数据量的最底部触发再加载数据事件
展示效果图:

      当滚动到前一次加载的数据量结束后,触发再加载事件。如图

上代码:
<el-table class="scrollbar" :data="tableData" border
                              style="width: 700px; height: 260px; font-size: 12px; margin-left: 20px;"
                              @header-click="handleTableClick">
                              <el-table-column prop="x" label="x" />
                              <el-table-column prop="压强" label="压强" />
                              <el-table-column prop="马赫数" label="马赫数" />
                              <el-table-column prop="温度" label="温度" />
                              <el-table-column prop="速度" label="速度" />
                              <el-table-column prop="燃气密度" label="燃气密度" />
                            </el-table>
                            <div style="text-align: center; font-size: 12px; color: #969292;">{{ loadDataMesssage }}</div>      其中,添加类选择器 class="scrollbar",主要作用是方便找到对应表格的滚动条
let data: any = [];
let data2: any = [];
let data3: any = [];
let data4: any = [];
let data5: any = [];
// 当前已加载的数据量
let loadedDataCount = 0;
const scrollTableDom = ref();
const loadDataMesssage = ref('');
const loadData = () => {
    if (data.length < 500) {
      const data1: TableDataType[] = [];
      for (let i = 0; i < data.length; i++) {
            data1.push({
                'x': data.x.toFixed(4),
                '压强': data.p.toFixed(4),
                '马赫数': data2.mach.toFixed(4),
                '温度': data3.temperature.toFixed(4),
                '速度': data4.velocity.toFixed(4),
                '燃气密度': data5.density.toFixed(4)
            });
      }
      tableData.value = data1;
    } else {
      scrollTableDom.value = document.querySelector('.scrollbar .el-table__body-wrapper .el-scrollbar__wrap');
      if (scrollTableDom.value) {
            scrollTableDom.value.addEventListener("scroll", handleScroll);
      }
      const batchSize = Math.floor(data.length / 50); // 每次加载的数据量
      const newData = [];
      for (let i = loadedDataCount; i < loadedDataCount + batchSize && i < data.length; i++) {
            newData.push({
                'x': data.x.toFixed(4),
                '压强': data.p.toFixed(4),
                '马赫数': data2.mach.toFixed(4),
                '温度': data3.temperature.toFixed(4),
                '速度': data4.velocity.toFixed(4),
                '燃气密度': data5.density.toFixed(4)
            });
      }
      loadedDataCount += batchSize;
      tableData.value = [...tableData.value, ...newData];
    }
};
const handleScroll = (event: any) => {
    const target = event.target;
    const scrollContainer = target;
    const scrollPosition = scrollContainer.scrollHeight - scrollContainer.scrollTop - scrollContainer.clientHeight;
    if (scrollPosition <= 0 && loadedDataCount < data.length) {
      console.log('滚动到底部了,加载更多数据');
      loadDataMesssage.value = '正在加载...';
      loadData();
    } else if (scrollPosition === 0 && loadedDataCount >= data.length) {
      console.log('数据为空,无法加载更多数据');
      loadDataMesssage.value = '已经到底了';
    } else {
      loadDataMesssage.value = '';
    }
};      我在这里设置了两种加载方式,当数据量少于500条时,就直接赋值给表格,不会出现打开表格卡顿,当数据量大于500条时,进行分批加载数据。
      通过类选择器找到表格滚动条并进行监听绑定事件,handleScroll
scrollTableDom.value = document.querySelector('.scrollbar .el-table__body-wrapper .el-scrollbar__wrap');
      if (scrollTableDom.value) {
            scrollTableDom.value.addEventListener("scroll", handleScroll);
      }const handleScroll = (event: any) => {
    const target = event.target;
    const scrollContainer = target;
    const scrollPosition = scrollContainer.scrollHeight - scrollContainer.scrollTop - scrollContainer.clientHeight;
    if (scrollPosition <= 0 && loadedDataCount < data.length) {
      console.log('滚动到底部了,加载更多数据');
      loadDataMesssage.value = '正在加载...';
      loadData();
    } else if (scrollPosition === 0 && loadedDataCount >= data.length) {
      console.log('数据为空,无法加载更多数据');
      loadDataMesssage.value = '已经到底了';
    } else {
      loadDataMesssage.value = '';
    }
};到此这篇关于Element-plus表格数据延迟加载的文章就介绍到这了,更多相关Element-plus延迟加载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/javascript/331248cwl.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Element-plus表格数据延迟加载的实现方案