最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Element-plus表格數(shù)據(jù)延遲加載的實(shí)現(xiàn)方案

 更新時(shí)間:2024年11月23日 11:06:28   作者:AI六月  
本文介紹了在前端展示大量數(shù)據(jù)時(shí)遇到的加載卡頓問題,并提供了一種解決方案:延遲加載,具體做法是設(shè)置加載數(shù)量,對(duì)于數(shù)據(jù)量較大的情況,進(jìn)行分批加載數(shù)據(jù),通過類選擇器找到表格滾動(dòng)條并進(jìn)行監(jiān)聽綁定事件,感興趣的朋友跟隨小編一起看看吧

在前端展示數(shù)據(jù)量過大的表格時(shí),會(huì)出現(xiàn)加載卡頓問題。

目前業(yè)務(wù)場(chǎng)景(加載數(shù)據(jù)量過五萬(wàn)條的數(shù)據(jù)在表格中展示)

解決方案:延遲加載,設(shè)置加載數(shù)量,首先加載展示一定數(shù)量的數(shù)據(jù),監(jiān)聽表格的滾動(dòng)條事件,當(dāng)滾動(dòng)到可視化數(shù)據(jù)量的最底部觸發(fā)再加載數(shù)據(jù)事件

展示效果圖:

        當(dāng)滾動(dòng)到前一次加載的數(shù)據(jù)量結(jié)束后,觸發(fā)再加載事件。如圖

上代碼:

<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="壓強(qiáng)" label="壓強(qiáng)" />
                                <el-table-column prop="馬赫數(shù)" label="馬赫數(shù)" />
                                <el-table-column prop="溫度" label="溫度" />
                                <el-table-column prop="速度" label="速度" />
                                <el-table-column prop="燃?xì)饷芏? label="燃?xì)饷芏? />
                            </el-table>
                            <div style="text-align: center; font-size: 12px; color: #969292;">{{ loadDataMesssage }}</div>

        其中,添加類選擇器 class="scrollbar",主要作用是方便找到對(duì)應(yīng)表格的滾動(dòng)條

let data: any = [];
let data2: any = [];
let data3: any = [];
let data4: any = [];
let data5: any = [];
// 當(dāng)前已加載的數(shù)據(jù)量
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),
                '壓強(qiáng)': data[i].p.toFixed(4),
                '馬赫數(shù)': data2[i].mach.toFixed(4),
                '溫度': data3[i].temperature.toFixed(4),
                '速度': data4[i].velocity.toFixed(4),
                '燃?xì)饷芏?: 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); // 每次加載的數(shù)據(jù)量
        const newData = [];
        for (let i = loadedDataCount; i < loadedDataCount + batchSize && i < data.length; i++) {
            newData.push({
                'x': data[i].x.toFixed(4),
                '壓強(qiáng)': data[i].p.toFixed(4),
                '馬赫數(shù)': data2[i].mach.toFixed(4),
                '溫度': data3[i].temperature.toFixed(4),
                '速度': data4[i].velocity.toFixed(4),
                '燃?xì)饷芏?: 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('滾動(dòng)到底部了,加載更多數(shù)據(jù)');
        loadDataMesssage.value = '正在加載...';
        loadData();
    } else if (scrollPosition === 0 && loadedDataCount >= data.length) {
        console.log('數(shù)據(jù)為空,無法加載更多數(shù)據(jù)');
        loadDataMesssage.value = '已經(jīng)到底了';
    } else {
        loadDataMesssage.value = '';
    }
};

        我在這里設(shè)置了兩種加載方式,當(dāng)數(shù)據(jù)量少于500條時(shí),就直接賦值給表格,不會(huì)出現(xiàn)打開表格卡頓,當(dāng)數(shù)據(jù)量大于500條時(shí),進(jìn)行分批加載數(shù)據(jù)。

        通過類選擇器找到表格滾動(dòng)條并進(jìn)行監(jiān)聽綁定事件,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('滾動(dòng)到底部了,加載更多數(shù)據(jù)');
        loadDataMesssage.value = '正在加載...';
        loadData();
    } else if (scrollPosition === 0 && loadedDataCount >= data.length) {
        console.log('數(shù)據(jù)為空,無法加載更多數(shù)據(jù)');
        loadDataMesssage.value = '已經(jīng)到底了';
    } else {
        loadDataMesssage.value = '';
    }
};

到此這篇關(guān)于Element-plus表格數(shù)據(jù)延遲加載的文章就介紹到這了,更多相關(guān)Element-plus延遲加載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue組件詳解之使用slot分發(fā)內(nèi)容

    vue組件詳解之使用slot分發(fā)內(nèi)容

    這篇文章主要介紹了vue組件詳解之使用slot分發(fā)內(nèi)容及Vue組件中slot的用法,需要的朋友可以參考下
    2018-04-04
  • vue等待數(shù)據(jù)渲染完成后執(zhí)行下一個(gè)方法問題

    vue等待數(shù)據(jù)渲染完成后執(zhí)行下一個(gè)方法問題

    這篇文章主要介紹了vue等待數(shù)據(jù)渲染完成后執(zhí)行下一個(gè)方法問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Vue引入騰訊地圖全過程(搜索獲取定位)

    Vue引入騰訊地圖全過程(搜索獲取定位)

    最近需要在項(xiàng)目中使用地圖顯示點(diǎn)位信息,所以引入了騰訊地圖,這篇文章主要給大家介紹了關(guān)于Vue引入騰訊地圖(搜索獲取定位)的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • Vue.js進(jìn)階知識(shí)點(diǎn)總結(jié)

    Vue.js進(jìn)階知識(shí)點(diǎn)總結(jié)

    給大家分享了關(guān)于Vue.js想成為高手的5個(gè)總要知識(shí)點(diǎn),需要的朋友可以學(xué)習(xí)下。
    2018-04-04
  • 使用Vue實(shí)現(xiàn)調(diào)用接口加載頁(yè)面初始數(shù)據(jù)

    使用Vue實(shí)現(xiàn)調(diào)用接口加載頁(yè)面初始數(shù)據(jù)

    今天小編就為大家分享一篇使用Vue實(shí)現(xiàn)調(diào)用接口加載頁(yè)面初始數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • Vue中添加滾動(dòng)事件設(shè)置的方法詳解

    Vue中添加滾動(dòng)事件設(shè)置的方法詳解

    這篇文章主要給大家介紹了關(guān)于Vue中添加滾動(dòng)事件設(shè)置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • vue中使用@change的方法

    vue中使用@change的方法

    @change 是 Vue.js 中用于監(jiān)聽表單元素值變化的事件處理器,很多組件有@change事件,那到底如何獲取到當(dāng)前的參數(shù)呢?本文給大家詳細(xì)講解,感興趣的朋友一起看看吧
    2023-11-11
  • 使用Vue3實(shí)現(xiàn)羊了個(gè)羊的算法

    使用Vue3實(shí)現(xiàn)羊了個(gè)羊的算法

    這篇文章主要介紹了使用Vue3實(shí)現(xiàn)羊了個(gè)羊的算法,初始化的隨機(jī)位置算法,通過實(shí)例代碼介紹了計(jì)算偏移量的方法,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • vue項(xiàng)目配置同一局域網(wǎng)可使用ip訪問的操作

    vue項(xiàng)目配置同一局域網(wǎng)可使用ip訪問的操作

    這篇文章主要介紹了vue項(xiàng)目配置同一局域網(wǎng)可使用ip訪問的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • vant 時(shí)間選擇器--開始時(shí)間和結(jié)束時(shí)間實(shí)例

    vant 時(shí)間選擇器--開始時(shí)間和結(jié)束時(shí)間實(shí)例

    這篇文章主要介紹了vant 時(shí)間選擇器--開始時(shí)間和結(jié)束時(shí)間實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11

最新評(píng)論

肥乡县| 无棣县| 双辽市| 宁化县| 沙坪坝区| 乌海市| 上犹县| 安仁县| 健康| 锦州市| 周口市| 东明县| 宿迁市| 肥西县| 曲沃县| 买车| 平利县| 揭阳市| 瑞金市| 准格尔旗| 锡林浩特市| 奎屯市| 晴隆县| 醴陵市| 肇州县| 固原市| 宜阳县| 南京市| 汉沽区| 安阳市| 深州市| 敦煌市| 崇仁县| 曲麻莱县| 彭山县| 古交市| 高要市| 漾濞| 大连市| 江阴市| 宝应县|