当前位置: 代码网 > it编程>编程语言>Javascript > Element-plus表格数据延迟加载的实现方案

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

2024年11月25日 Javascript 我要评论
在前端展示数据量过大的表格时,会出现加载卡顿问题。目前业务场景(加载数据量过五万条的数据在表格中展示)解决方案:延迟加载,设置加载数量,首先加载展示一定数量的数据,监听表格的滚动条事件,当滚动到可视化

在前端展示数据量过大的表格时,会出现加载卡顿问题。

目前业务场景(加载数据量过五万条的数据在表格中展示)

解决方案:延迟加载,设置加载数量,首先加载展示一定数量的数据,监听表格的滚动条事件,当滚动到可视化数据量的最底部触发再加载数据事件

展示效果图:

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

上代码:

<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[i].x.tofixed(4),
                '压强': data[i].p.tofixed(4),
                '马赫数': data2[i].mach.tofixed(4),
                '温度': data3[i].temperature.tofixed(4),
                '速度': data4[i].velocity.tofixed(4),
                '燃气密度': data5[i].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[i].x.tofixed(4),
                '压强': data[i].p.tofixed(4),
                '马赫数': data2[i].mach.tofixed(4),
                '温度': data3[i].temperature.tofixed(4),
                '速度': data4[i].velocity.tofixed(4),
                '燃气密度': data5[i].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延迟加载内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com