el-transfer穿梭框數據量過大的解決方案

一:背景


我們這個穿梭框獲取的是項目的全量數據,在左邊大概有5000條,自己測試了一下5000條數據的效果,發現異常的卡頓,本來打算像el-select一樣去解決的(只顯示一部分,在搜索的時候去全量搜索,奈何這個搜索方法不支持遠程搜索,只能棄用該解決方案),一頓百度跟ai搜索,感覺答案都比較模糊,所以記錄一下該解決方案。

二:解決方案一(最簡單):

參考:el-transffer大數據量頁面卡頓優化

a.安裝
npm install el-virtual-transfer --save
b.使用

組件內導入注冊一下即可使用:

import ElTransferVirtual from 'element-transfer-virtual'
components: { ElTransferVirtual }
c.替換組件名

直接用ElTransferVirtual替換你的el-transfer組件名就行了。其他的都不用變

<template><div class="home"><el-virtual-transferfilterable:filter-method="filterMethod"filter-placeholder="請輸入城市拼音"v-model="value":data="data"></el-virtual-transfer></div>
</template><script>
import ElVirtualTransfer from 'el-virtual-transfer';
export default {name: 'HomeView',data() {const generateData = _ => {const data = [];// 生成 3000 個數據for (let i = 0; i < 3000; i++) {const label = `城市${i + 1}`;const key = i;const pinyin = `chengshi${i + 1}`;data.push({label: label,key: key,pinyin: pinyin});}return data;};return {data: generateData(),value: [],filterMethod(query, item) {return item.pinyin.indexOf(query) > -1;}};},created() {},methods: {},components: {ElVirtualTransfer}
};
</script>

d.優缺點:
優點:使用十分的簡單,只需要安裝依賴替換組件名即可
缺點:該組件方案只上傳到了npm,但是并沒有開源。我的意思是,如果你的數據是全量數據(獲取全量數據不卡的話),就可以直接使用這個方案,畢竟簡單。( 如果獲取全量數據卡的話,你可以在用戶進入頁面時就去靜默分批的獲取這個數據,也是一種解決方案)

三:解決方案二(拓展性強):

參考: Element-UI的transfer穿梭框組件數據量大解決方案

a.在components下面新建一個文件夾,用來存放組件

main.vue , transfer-checkbox-item.vue ,transfer-panel.vue的內容我就不貼了。可以直接去我的demo上復制過來就可以用了。

這里還要安裝一個插件(代碼里用到了虛擬滾動的插件):

npm i vue-virtual-scroll-list
b.自定義指令代碼

因為組件內用到了一個自定義指令,所以需要把這個自定義指令的代碼復制過來,在directives文件夾下,直接把我的代碼(infinite-scroll整個文件夾)復制過來就行。并且在main.js上注冊一下:

c.main.js注冊自定義指令:
import InfiniteScroll from '@/directives/infinite-scroll'; // 替換為實際路徑
InfiniteScroll.install(Vue);
d.替換組件名,并且傳入 :virtual-scroll="true"激活虛擬列表

直接用Transfer替換你的el-transfer組件名就行了,并且一定要傳入:virtual-scroll=“true”,不然跟原來的el-transfer沒有區別,還是會很卡。

<template><div class="about"><Transferfilterable:filter-method="filterMethod"filter-placeholder="請輸入城市拼音"v-model="value":data="data":virtual-scroll="true"></Transfer></div>
</template><script>
import Transfer from '@/components/Transfer/main.vue';
export default {name: 'HomeView',data() {const generateData = _ => {const data = [];// 生成 3000 個數據for (let i = 0; i < 9000; i++) {const label = `城市${i + 1}`;const key = i;const pinyin = `chengshi${i + 1}`;data.push({label: label,key: key,pinyin: pinyin});}return data;};return {data: generateData(),value: [],filterMethod(query, item) {return item.pinyin.indexOf(query) > -1;}};},created() {},methods: {},components: {Transfer}
};
</script>

e.優缺點:

優點:1.源碼都已經給你了,可以根據自己的項目來自定義 2.上面那個方案只能傳入全量的數據,但是這個方案因為源碼都給你了,你可以修改源碼,在一開始的時候只加載部分數據,然后用戶下拉的時候再去加載更多的數據,搜索的話,你可以用全量數據來搜索

缺點: 需要復制的內容過多

四.原理

大家可以把項目demo跑起來看一下,其實都是修改了el-transfer的源碼,然后結合虛擬列表的組件來使dom渲染的結構更少。具體虛擬列表的原理,大家可以自行百度下: 其核心思想就是在處理用戶滾動時,只改變列表在可視區域的渲染部分,然后translate來讓渲染的列表偏移到可視區域中,給用戶平滑滾動的感覺。

其實原理都是一樣的,大家如果能采用的話,還是盡量采用第一種方案,因為已經壓縮過了,代碼體積更小。

五.demo源碼地址

github: https://github.com/rui-rui-an/el_transfer_big_data

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79038.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79038.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79038.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025年- H17-Lc125-73.矩陣置零(矩陣)---java版

1.題目描述 2.思路 &#xff08;1&#xff09;計算矩陣的行數 &#xff08;2&#xff09;計算矩陣的列數 &#xff08;3&#xff09;設計一個行列的bool數組 &#xff08;4&#xff09;遍歷矩陣&#xff08;二維數組&#xff09;&#xff0c;如果遇到元素0&#xff0c;則把…

Qt二維碼demo

使用QZXing庫生成的二維碼demo 運行結果 實現代碼 c文件 #include "mainwindow.h" #include "ui_mainwindow.h" #include "src/myqrcodeheader.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui-&…

怪物獵人:世界-冰原10000+mod整合包5月最新更新!

700A大全套精美服裝 800M大全套精美服裝 3月31日更新 新增 新武器 新特效MOD 當前共計5800MOD整合包 好看的發型mod 實用的功能mod 炫酷的武器mod 新服裝新特效新武器實用模組美化&#xff0c;等。 1月14日更新 新增皮膚MOD 500 當前共計2000MOD 1月16日更新 新增超…

華納云:centos如何實現JSP頁面的動態加載

JSP(JavaServer Pages)作為Java生態中常用的服務器端網頁技術&#xff0c;具有動態內容生成、可擴展性強、與Java無縫結合等優勢。 而CentOS作為一款穩定、高效、安全的Linux服務器操作系統&#xff0c;非常適合部署JSP應用。 想要讓JSP頁面實現動態更新加載&#xff0c;避免…

gradle-tasks.register(‘classesJar‘, Jar)解析

在使用gradle作為構建工具的android或者java web項目中&#xff0c;我們經常能遇到以下格式 tasks.register(classesJar, Jar) {from "$buildDir/intermediates/javac/release/classes" // 假設使用 release 構建變體 }artifact sourcesJar使用偽代碼解釋 class Cu…

數據處理1

一、常用數據處理模塊Numpy Numpy常用于高性能計算&#xff0c;在機器學習常常作為傳遞數據的容器。提供了兩種基本對象&#xff1a;ndarray、ufunc。 ndarray具有矢量算術運算和復雜廣播能力的快速且節省空間的多維數組。 ufunc提供了對數組快速運算的標準數學函數。 ndar…

電力市場的交易品種

雙邊交易&#xff08;Bilateral Trading&#xff09; 定義&#xff1a;是電力市場中最基本的交易方式之一&#xff0c;指具備市場交易資格的買方和賣方&#xff0c;通過自主協商、雙邊協商的形式&#xff0c;確定交易電量、交易價格、交割曲線等交易要素&#xff0c;并簽訂中長…

uniapp 實現時分秒 分別倒計時

效果 <view class"issue-price-countdown"> <CountDown :endTimestamp"1745996085000"></CountDown> </view> 引入組件 import CountDown from /components/CountDown.vue; <template> <view class&qu…

從CRUD到復雜業務:AI自動生成電商優惠券疊加邏輯(新手救星指南)

在 Java 編程的廣闊天地中,據統計,高達 80% 的新手會在業務邏輯編寫環節陷入困境。業務邏輯作為軟件系統的核心靈魂,承載著從用戶需求到代碼實現的關鍵轉化過程,為何卻成為新手難以逾越的 “鴻溝”?飛算 JavaAI 的出現,又將如何打破這一僵局? 一、Java 新手卡在業務邏輯的根…

23頁PDF | 數據治理實施方案 :規劃、執行、評價、改進四步走的管控模式

在當今數字化時代&#xff0c;數據已經成為企業和組織的核心資產之一。然而&#xff0c;隨著數據量的不斷增長和數據來源的日益多樣化&#xff0c;數據治理變得愈發重要。有效的數據治理能夠確保數據的質量、安全和合規性&#xff0c;提升數據的價值和利用效率。那么&#xff0…

curl詳解

curl 是一個常用的命令行工具&#xff0c;用于發送 HTTP 請求&#xff0c;支持包括 GET、POST、PUT、DELETE 等在內的多種 HTTP 方法。它非常適合用來測試 API、下載文件、與后端服務進行交互等。接下來&#xff0c;我會詳細講解 curl 的基本用法以及常見的應用場景。 &#x…

Win11安裝Ubuntu20.04簡記

寫在前面 之前裝的22.04&#xff0c;不穩定&#xff0c;把22.04卸載了&#xff0c;重新安裝20.04系統。這里主要把卸載和安裝的過程中參考到的博客在這記錄一下。 卸載ubuntu系統參考的博文 卸載參考博文1 卸載參考博文2 Ubuntu20.04安裝參考博文 安裝參考博文1 安裝參考博…

云原生 | K8S中數據存儲之StorageClass

在一個大規模的Kubernetes集群里,可能有成千上萬個PVC,這就意味著運維人員必須實現創建出這個多個 PV,此外,隨著項目的需要,會有新的PVC不斷被提交,那么運維人員就需要不斷的添加新的,滿足要求的PV,否 則新的Pod就會因為PVC綁定不到PV而導致創建失敗。而且通過 PVC 請求到一定的…

基于Hadoop大數據技術音樂推薦系統數據分析與可視化(基于Spark和Hive的音樂推薦系統數據分析與可視化)基于Python的音樂推薦系統數據分析與可視化

基于Hadoop大數據技術音樂推薦系統數據分析與可視化&#xff08;基于Spark和Hive的音樂推薦系統數據分析與可視化&#xff09;基于Python的音樂推薦系統數據分析與可視化 1. 開發工具和實現技術 Pycharm, Python3.7&#xff0c;Django框架&#xff0c;Hadoop&#xff0c;Spar…

podman/docker國內可用的docker鏡像源(2025-05)

一、添加Docker國內鏡像 1、修改 /etc/docker/daemon.json 設置 registry mirror&#xff0c;具體命令如下: sudo vim /etc/docker/daemon.json <<EOF {"registry-mirrors": ["https://docker.1ms.run","https://docker.xuanyuan.me",&q…

【Java ee初階】多線程(4)

一、java是怎么做到可重入的 java中&#xff0c;通過synchronized進行加鎖&#xff0c;指定一個&#xff08;&#xff09;包含了一個鎖對象。&#xff08;鎖對象本身是一個啥樣的對象&#xff0c;這并不重要&#xff0c;重點關注鎖對象是不是同一個對象&#xff09; 后面搭配…

LaTex、pdfLaTex、XeLaTex和luaLaTex的區別和聯系

之前一直搞不懂這些亂七八糟的Tex到底有啥區別&#xff0c;不同引擎不同編譯器換來換去&#xff0c;查了些資料又問了下AI&#xff0c;總算是搞懂了。 大概是這樣&#xff0c;很久以前有人寫了個Tex排版引擎&#xff0c;輸入一些代碼命令&#xff0c;輸出dvi文件&#xff08;設…

【Unity】一個UI框架例子

使用框架前置條件&#xff1a;調整腳本運行順序, Canvas掛載UIManager, Panel掛載對應的UIController、UI控件掛載UIControl。 UIManager:UI管理器&#xff0c;用于處理和管理各個UIController和UIControl的業務邏輯&#xff0c;掛載在Canvas上&#xff1b; UIController:界面層…

kalibr:相機模型

文章目錄 ??簡介Kalibr標定支持的相機模型及適用場景?? 針孔相機模型(Pinhole)?? 全向相機模型(Omnidirectional)?? 特殊模型?? 選型建議?? 注意事項??簡介 Kalibr作為多傳感器標定的重要工具,支持多種相機模型以適應不同光學特性的視覺傳感器。其核心相機…

今日行情明日機會——20250430

指數目前仍然在震蕩區間&#xff0c;等后續的方向選擇以及放量后的主線~ 2025年4月30日漲停主要行業方向分析 一、核心主線方向 機器人概念&#xff08;政策催化技術突破&#xff09; ? 漲停家數&#xff1a;18家。 ? 代表標的&#xff1a; ? 全筑股份&#xff08;工業機器…