vue3+elementUI-plus實現select下拉框的虛擬滾動

網上查了幾個方案,要不就是不兼容,要不就是不支持vue3,
最終找到一個合適的,并且已上線使用,需要修改一下樣式:
代碼如下:
main.js里引用

import 'vue3-virtual-scroller/dist/vue3-virtual-scroller.css';
import { RecycleScroller } from 'vue3-virtual-scroller';
app.component('RecycleScroller', RecycleScroller);

vue文件:

<el-form-item label="用戶" prop="seriesId"><div ref="selectWrapper" @click="toggleDropdown($event)" class="select-wrapper"><el-input style="width: 240px"placeholder="請輸入搜索內容"v-model="selectedOption":suffix-icon="selectedOption ? 'el-icon-circle-close' : null"@clear="clearSearch"></el-input></div><el-icon class="clear-btn" v-if="selectedOption" @click.stop="clearSearch"><CircleClose /></el-icon><Teleport to="body"><div v-show="isOpen"  ref="dropdown" class="virtual-dropdown" :style="dropdownStyles" @click="closeDropdown"><RecycleScrollerclass="virtual-list":buffer="1000":prerender="200"style="height: 270px":item-size="24"key-field="id":items="filteredSeriesList"><template v-slot="{ item, index }"><div class="list-item" :key="index" @click.stop="handleItemClick(item)"><span>{{ item.id }}</span>&nbsp;-&nbsp;<span>{{ item.name }}</span></div></template></RecycleScroller></div></Teleport></el-form-item>

js代碼:

<script setup name="LeadsList">
const rowCount = ref(0);const rowCount2 = ref(0);const leadsList = ref([]);const loading = ref(false);const activeButton = ref(0);const seriesList = ref([]);const filteredSeriesList = ref([]); // 初始狀態下,篩選后的列表與原始列表相同const indexLayer = ref(false);const open = ref(false);const dropdown = ref(null);const repeatLoading = ref(false);const repeatList = ref([]);const dropdownStyles = ref({});const selectWrapper = ref({});const isOpen = ref(false);const selectedOption = ref('');const data = reactive({queryParams: {pageIndex: 1,pageSize: 10,phone: "",seriesId: null,},queryParamsRepeat: {pageIndex: 1,pageSize: 10,companyId: 1,userId: 1}});const { queryParams,queryParamsRepeat } = toRefs(data);watch(selectedOption, (newValue) => {search(newValue);});function search (keyword) {if (keyword.trim() === "") {filteredSeriesList.value = [...seriesList.value];} else {filteredSeriesList.value = seriesList.value.filter((item) =>item.name.toLowerCase().includes(keyword.toLowerCase()));}}function handleItemClick(item) {queryParams.value.seriesId = item.id;selectedOption.value = item.name;closeDropdown()}function closeDropdown(event = null) {isOpen.value = false;if (event &&(selectWrapper.value.contains(event.target) ||dropdown.value.contains(event.target))) {return;}isOpen.value = false;}function toggleDropdown($event) {$event.stopPropagation(); // 阻止事件冒泡isOpen.value = !isOpen.value;if (isOpen.value) {const rect = selectWrapper.value.getBoundingClientRect();const { x, y, width, height } = rect;dropdownStyles.value = {position: 'fixed',top: `${y + height}px`,left: `${x}px`,width: `${width}px`,};}}function clearSearch () {queryParams.value.seriesId = '';selectedOption.value = '';filteredSeriesList.value = [...seriesList.value];}

css代碼:

.virtual-dropdown {position: absolute;inset: 100% auto auto 0;z-index: 2000;width: 100%;overflow-y: auto;overflow-x: hidden;border: 1px solid #ebeef5;border-radius: 4px;background-color: #fff;box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
}.list-item {display: flex;padding: 0 10px;align-items: center;height: 24px;cursor: pointer;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;
}.list-item:hover {background-color: #f5f7fa;
}
.clear-btn {border: none;background: transparent;cursor: pointer;position: absolute;right: 14px;}

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

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

相關文章

xollam勒索病毒數據恢復|金蝶、用友、管家婆、OA、速達、ERP等軟件數據庫恢復

引言&#xff1a; 數字時代的繁榮與便捷&#xff0c;也孕育著各種網絡安全威脅。其中&#xff0c;.xollam勒索病毒以其毒害性和隱蔽性引發了廣泛關注。本文91數據恢復將為您深入解析.xollam勒索病毒的威脅&#xff0c;探討解密方法&#xff0c;同時分享預防.xollam勒索病毒的關…

Python入門教程23:math模塊的用法

**math是Python 的一個內置模塊&#xff0c;它提供了許多數學函數和常量&#xff0c;用于進行數學計算。**以下是一些常用的math模塊中的函數和常量&#xff1a; math.pi&#xff1a;圓周率π的近似值&#xff0c;約等于3.14159。 math.e&#xff1a;自然對數的底數e的近似值…

【Tomcat】(Tomcat 下載Tomcat 啟動Tomcat 簡單部署 基于Tomcat進行網站后端開發)

文章目錄 Tomcat下載Tomcat啟動Tomcat簡單部署 基于Tomcat進行網站后端開發 Tomcat Tomcat 是一個 HTTP 服務器.HTTP 協議就是 HTTP 客戶端和 HTTP 服務器之間的交互數據的格式. HTTP 服務器我們可以通過 Java Socket 來實現. 而 Tomcat 就是基于 Java 實現的一個開源免費,也是…

Python爬蟲:如何使用Python爬取網站數據

更新&#xff1a;2023-08-13 15:30 想要獲取網站的數據&#xff1f;使用Python爬蟲是一個絕佳的選擇。Python爬蟲是通過自動化程序來提取互聯網上的信息。本文章將會詳細介紹Python爬蟲的相關技術。 一、網絡協議和請求 在使用Python爬蟲之前&#xff0c;我們需要理解網絡協…

Synopsys EDA數字設計與仿真

搭建EDA環境 參考如下博文安裝Synopsys EDA開發工具 https://blog.csdn.net/tugouxp/article/details/132255002?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132255002%22%2C%22source%22%3A%22tugouxp%22%7D Synopsys ED…

【Git】本地搭建Gitee、Github環境

本地 &#xff08;Local&#xff09; 1、使用命令生成公鑰&#xff08;pub文件&#xff09; 1. $ ssh-keygen -t rsa -C "xxxxxxxemail.com" -f "github_id_rsa" 2. $ ssh-keygen -t rsa -C "xxxxxxxemail.com" -f "gitee_id_rsa" …

配置pyqt5開發環境

安裝庫 pip install pyqt5 -i https://mirrors.aliuyun.com/pypi/simple pip install pyqt5-tools -i https://mirrors.aliuyun.com/pypi/simple pip install PyQt5designer -i https://mirrors.aliuyun.com/pypi/simple配置External Tools Name:QtDesigner Program:C:\Anaco…

常見的 JavaScript 框架比較

以下是10種常見的JavaScript框架的比較&#xff1a; React&#xff1a;是由Facebook開發和維護的開源JavaScript庫&#xff0c;用于構建用戶界面。它允許你使用組件來構建復雜的UI&#xff0c;并專注于每個組件的內部邏輯&#xff0c;而不必擔心管理整個應用程序的狀態。WebBu…

使用路由器更改設備IP_跨網段連接PLC

在一些設備IP已經固定,但是需要采集此設備的數據,需要用到跨網段采集 1、將路由器WAN&#xff08;外網撥號口&#xff09;設置為靜態IP 2、設置DMZ主機&#xff0c;把DMZ主機地址設置成跨網段的PLC地址 DMZ主機 基本信息. DMZ (Demilitarized Zone)即俗稱的非軍事區&#xff0…

牛客網華為OD前端崗位,面試題庫練習記錄01

題目一 質數因子 功能:輸入一個正整數&#xff0c;按照從小到大的順序輸出它的所有質因子&#xff08;重復的也要列舉&#xff09;&#xff08;如180的質因子為2 2 3 3 5 &#xff09; JavaScript Node ACM模式 const rl require("readline").createInterface({ i…

IPv4分組

4.3.1 IPv4分組 IP協議定義數據傳送的基本單元——IP分組及其確切的數據格式 1. IPv4分組的格式 IPv4分組由首部和數據部分&#xff08;TCP、UDP段&#xff09;組成&#xff0c;其中首部分為固定部分&#xff08;20字節&#xff09;和可選字段&#xff08;長度可變&#xff0…

1AE4 的魔改混合放大電路

先上電路圖&#xff1a; 最新的1AE4的電路&#xff0c;目標依舊是極致的音效。 因此&#xff0c;為了將1AE4的潛力榨干&#xff0c;采用了一些完全不同的思路&#xff1a; 1&#xff09;原有的屏極接地&#xff0c;因為是一個殼子&#xff0c;所以能起到很好的屏蔽作用&#…

651頁23萬字智慧教育大數據信息化頂層設計及建設方案WORD

導讀&#xff1a;原文《651頁23萬字智慧教育大數據信息化頂層設計及建設方案WORD》&#xff08;獲取來源見文尾&#xff09;&#xff0c;本文精選其中精華及架構部分&#xff0c;邏輯清晰、內容完整&#xff0c;為快速形成售前方案提供參考。 目錄 一、 方案背景 1.1 以教育…

微信開發之一鍵獲取好友詳情的技術實現

簡要描述&#xff1a; 獲取聯系人信息 請求URL&#xff1a; http://域名地址/getContact 請求方式&#xff1a; POST 請求頭Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 參數&#xff1a; 參數名必選類型說…

LaWGPT基于中文法律知識的大語言模型_初步安裝

準備代碼&#xff0c;創建環境 # 下載代碼 git clone gitgithub.com:pengxiao-song/LaWGPT.git cd LaWGPT# 創建環境 conda create -n lawgpt python3.10 -y conda activate lawgpt國內網絡環境問題。你可以把requirements.txt里面的github.com替換成kgithub.com&#xff08;這…

go 協程并發數控制

錯誤的寫法&#xff1a; 這里的<-ch 是為了從channel 中讀取 數據&#xff0c;為了不使channel通道被寫滿&#xff0c;阻塞 go 協程數的創建。但是請注意&#xff0c;go workForDraw(v, &wg) 是不阻塞后續的<-ch 執行的&#xff0c;所以就一直go workForDraw(v, &…

使用 NLP 進行文本摘要

一、說明 文本摘要是為較長的文本文檔生成簡短、流暢且最重要的是準確摘要的過程。自動文本摘要背后的主要思想是能夠從整個集合中找到最重要信息的一小部分&#xff0c;并以人類可讀的格式呈現。隨著在線文本數據的增長&#xff0c;自動文本摘要方法可能會非常有用&#xff0c…

C語言好題解析(一)

目錄 選擇題1選擇題2選擇題3選擇題4編程題一 選擇題1 執行下面程序&#xff0c;正確的輸出是&#xff08; &#xff09;int x 5, y 7; void swap() {int z;z x;x y;y z; } int main() {int x 3, y 8;swap();printf("%d,%d\n",x, y);return 0; }A: 5,7 B: …

H5前端外包開發框架排名

以下是一些常見的網頁前端開發框架以及它們的排名和特點。請注意&#xff0c;隨著時間的推移&#xff0c;框架的排名和特點可能會有所變化。不同的項目和團隊對于框架的選擇會受到多個因素的影響&#xff0c;包括開發團隊的技能、項目的規模和要求、性能需求等。北京木奇移動技…

try-with-resource

git https://gitee.com/my739168148/auto-close-try-with-resource.git 限制 try-with-resource是java7版本引入的。 java版本說明 Autocloseable 只要是java.lang.Autocloseable接口的實現類&#xff0c;那么都可以使用try-with-resource來自動關閉資源。 使用 JDK1.8開…