【前端Vue】使用ElementUI實現表單中可選擇可編輯的下拉框

由于項目在vue的開發框架下,因此使用ElementUI組件庫進行實現。

我希望可選擇可編輯的下拉框右側有跟下拉框一樣的箭頭,并且在未輸入任何內容時,點擊該框體會出現選擇列表進行填充數據的選擇,點擊選中數據后列表消失,數據內容出現在框體中,并且點擊可編輯,編輯時不會再有任何列表出現,當清空框體后候選列表可出現。

但是ElemnetUI組件庫中并沒有完全符合需求的組件。

只有不可編輯的下拉框el-select(缺少可編輯功能)

或是只能編輯的el-input(缺少下拉選擇功能)

或是只有輸入出現匹配提示的el-autocomplete(缺少下拉箭頭和展開收起功能,點擊已有內容會再次出現候選列表)

網上也沒找到特別符合需求的,因此打算在輸入出現匹配提示的el-autocomplete基礎上進行修改。

在設計上增加了下拉框的箭頭,因此要根據候選列表的顯示和隱藏去綁定箭頭的方向,讓它們兩者互相聯動互相影響。

<el-autocompletev-model="form.processes":fetch-suggestions="queryProcesses"placeholder="請輸入進程數"clearable:style="{width: '100%'}"ref="processesAutocomplete"@focus="handleProcessesFocus"@blur="handleProcessesBlur"@clear="handleProcessesClear"class="processes-autocomplete":class="{ 'is-empty': !form.processes, 'is-dropdown-visible': isProcessesDropdownVisible }"@click.native="handleProcessesInputClick"
><islot="suffix":class="['el-input__icon', 'el-icon-arrow-down', 'processes-arrow', { 'is-reverse': isProcessesDropdownVisible }]"@click.stop="toggleProcessesDropdown"></i>
</el-autocomplete>

自定義下拉箭頭:

使用 <i> 元素作為后綴圖標,設置下拉箭頭

動態類綁定:

processes-autocomplete:基礎樣式類

'is-empty': !form.processes:當輸入框為空時添加 is-empty 類

'is-dropdown-visible': isProcessesDropdownVisible:當下拉列表顯示時添加該類

箭頭圖標控制:

processes-arrow:箭頭基礎樣式

'is-reverse': isProcessesDropdownVisible:當下拉列表顯示時旋轉180度

事件處理:

@click.native="handleProcessesInputClick":處理輸入框點擊

@click.stop="toggleProcessesDropdown":點擊箭頭切換下拉狀態

在data()中添加以下示例內容:

isProcessesDropdownVisible: false,processesOptions: [{ value: "30", label: '30' },{ value: "60", label: '60' },{ value: "120", label: '120' }],

Methods部分要增加以下內容:

控制只在輸入框為空時顯示預定義選項。???

queryProcesses(queryString, cb) {// 只顯示預定義的選項,不根據輸入內容過濾// 只有當輸入框為空時才顯示所有選項if (!queryString) {cb(this.processesOptions);} else {// 當有輸入內容時,不顯示任何建議列表cb([]);}},


延遲隱藏下拉列表,避免用戶點擊選項時立即隱藏。

 handleProcessesBlur() {// 延遲隱藏下拉列表,避免點擊選項時立即隱藏setTimeout(() => {this.isProcessesDropdownVisible = false;}, 150);},


清空輸入內容時顯示下拉列表。

 handleProcessesClear() {this.isProcessesDropdownVisible = true;},

? ?根據輸入框是否為空決定是否切換下拉狀態。

 // 處理輸入框點擊事件handleProcessesInputClick() {// 如果輸入框有內容,只聚焦不切換下拉狀態if (this.form.processes) {return;}// 如果輸入框為空,切換下拉狀態this.toggleProcessesDropdown();},


控制下拉列表的顯示/隱藏,并相應地設置建議選項和焦點。

// 切換下拉列表顯示狀態toggleProcessesDropdown() {this.isProcessesDropdownVisible = !this.isProcessesDropdownVisible;this.$nextTick(() => {if (this.$refs.processesAutocomplete) {if (this.isProcessesDropdownVisible) {// 立即顯示下拉列表this.$refs.processesAutocomplete.suggestions = this.processesOptions;// 聚焦到輸入框this.$refs.processesAutocomplete.focus();} else {// 隱藏下拉列表并取消輸入框焦點// 清空建議列表來隱藏下拉菜單if (this.$refs.processesAutocomplete.suggestions) {this.$refs.processesAutocomplete.suggestions = [];}// 取消輸入框焦點this.$refs.processesAutocomplete.$el.querySelector('input').blur();}}});},

樣式文件如下:

<style scoped>.processes-autocomplete.is-empty ::v-deep .el-input__inner {padding-right: 30px;}.processes-arrow {transition: transform 0.25s ease-in-out;cursor: pointer;line-height: 30px;color: #C0C4CC;font-size: 14px;}.processes-arrow.is-reverse {transform: rotate(-180deg);}.processes-autocomplete:not(.is-empty) ::v-deep .processes-arrow {display: none;}/* 當鼠標按下時保持箭頭狀態不變 */.processes-arrow:active {transform: rotate(-180deg) !important;}</style>

箭頭方向與下拉狀態聯動:

下拉列表隱藏時:箭頭向下(默認狀態)

下拉列表顯示時:箭頭向上(通過 is-reverse 類實現)

箭頭顯示與輸入內容聯動:

輸入框為空時:顯示箭頭

輸入框有內容時:隱藏箭頭顯示清空圖標

用戶體驗優化:

點擊箭頭或空輸入框可切換下拉狀態

有內容時點擊輸入框不會改變下拉狀態

延遲隱藏避免誤操作

平滑的旋轉動畫效果

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

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

相關文章

每日五個pyecharts可視化圖表-line:從入門到精通 (4)

歡迎來到pyecharts折線圖系列的第四篇文章&#xff01;在前三篇中&#xff0c;我們已經掌握了多種折線圖類型&#xff0c;包括基本折線圖、平滑折線圖、雨量流量關系圖、多X軸折線圖、堆疊區域圖和階梯圖等。在本文中&#xff0c;我們將繼續探索五種更高級的折線圖類型&#xf…

MySQL中的字符串函數

目錄 一、字符串【分割】函數&#xff1a;SUBSTRING_INDEX() SUBSTRING_INDEX函數 練習題 統計每種性別的人數 提取博客URL中的用戶名 截取出年齡 SQL83 商品id數據清洗統計 SQL250 查找字符串中逗號出現的次數 二、字符串【截取】函數&#xff1a;SUBSTRING() 基本語…

CodeBuddy IDE深度體驗:AI驅動的全棧開發新時代

在人工智能技術迅猛發展的今天&#xff0c;開發者工具正在經歷一場深刻的變革。騰訊推出的CodeBuddy IDE作為全球首個“產設研一體”的AI全棧高級工程師工具&#xff0c;重新定義了開發者的日常工作流程。 從需求分析到設計、編碼、部署&#xff0c;CodeBuddy通過AI能力將傳統…

實現Android圖片手勢縮放功能的完整自定義View方案,結合了多種手勢交互功能

主要功能特點&#xff1a;支持雙指手勢縮放圖片&#xff0c;通過ScaleGestureDetector實現平滑的縮放效果25雙擊圖片可切換初始大小和中等放大比例16使用Matrix進行圖像變換&#xff0c;保持縮放中心點為手勢焦點位置57自動縮放動畫通過Runnable實現漸進式變化1限制最小和最大縮…

uni-app實戰教程 從0到1開發 畫圖軟件 (橡皮擦)

一、本期內容簡述1. 開發內容上一期&#xff0c;我們一起學習了如何進行繪畫&#xff0c;本期我們將學習如何擦除我們所繪畫的內容&#xff0c;也就是“橡皮擦”功能。首先&#xff0c;我們應該明確需求&#xff0c;橡皮擦可以擦除掉我們繪畫的內容。2. 開發需求所以開發需求&a…

《A Practical Guide to Building Agents》文檔學習

《A Practical Guide to Building Agents》文檔總結 該文檔是一份面向產品和工程團隊的實用指南&#xff0c;旨在幫助團隊探索并構建首個基于大語言模型&#xff08;LLM&#xff09;的智能體&#xff08;Agent&#xff09;&#xff0c;提煉了大量客戶部署經驗&#xff0c;提供了…

OpenCV圖像注冊模塊

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 注冊模塊實現了參數化圖像配準。所實現的方法是直接對齊&#xff08;direct alignment&#xff09;&#xff0c;即&#xff0c;它直接使用像素值來…

模型驅動與分布式建模:技術深度與實戰落地指南

摘要 在AI、云原生與全球化協作的大潮中&#xff0c;模型驅動架構&#xff08;MDA&#xff09;與分布式建模不再是概念&#xff0c;而是支撐復雜系統設計與持續演化的核心引擎。本文從元模型、模型轉換引擎&#xff0c;到協同協議、沖突解決算法&#xff0c;再到AI輔助建模與自…

計算機基礎速通--數據結構·圖的基礎應用二(基礎圖算法)

如有問題大概率是我的理解比較片面&#xff0c;歡迎評論區或者私信指正。 最近了解到了一個新的改變和提高自己的方法時刻記錄不論多小的事情都記下&#xff0c;我目前用了4天&#xff0c;之前感覺一天天忙死但沒啥收獲&#xff0c;但是記錄了之后知道自己的時間花在了哪里&…

設計模式-策略模式 Java

模式概述 策略模式是一種行為型設計模式&#xff0c;它通過定義一系列可互換的算法&#xff0c;并將每個算法封裝成獨立類&#xff0c;使客戶端能夠根據需要動態切換算法 簡單代碼示例 // 1. 抽象策略接口 interface PaymentStrategy {void pay(int amount); }// 2. 具體策略實…

【機器學習深度學習】客觀評估訓練程度

目錄 前言 一、什么是客觀評估&#xff1f; 二、客觀評估的兩大核心方法 1. 判別式評測&#xff08;Discriminative Evaluation&#xff09; 2. 生成式評測&#xff08;Generative Evaluation&#xff09; 三、為什么客觀評估成本更高&#xff1f; 1.訓練目標收緊 2.訓…

Linux軟件編程:線程間通信

目錄 一、線程間通信基礎 1. 概念 2. 通信基礎&#xff1a;共享空間 二、互斥鎖&#xff08;Mutex&#xff09; 1. 概念 2. 使用流程 3. 函數接口 三、死鎖 1. 概念 2. 死鎖產生的 4 個必要條件 3. 避免死鎖的方法 四、信號量&#xff08;Semaphore&#xff09; 1…

【學習筆記】JVM GC回收機制

1.三種基本的垃圾回收算法 1>標記-清除法 ①先將從樹根開始&#xff0c;可以到達的對象標記為可達&#xff08;JVM中的對象們存儲為一顆樹&#xff09; ②將沒有標記的對象清除掉 缺點&#xff1a;會產生大量內存碎片 2>復制算法&#xff08;新生代&#xff09; ①先將a區…

軟件的終極:為70億人編寫70億個不同的軟件

這是個腦洞大開的想法。昨天晚上&#xff0c;我在用Claude code幫我寫一個小工具&#xff0c;用來管理我本地那些亂七八糟的文檔。寫著寫著&#xff0c;突然意識到一個問題&#xff1a;這個工具完全是按照我的工作習慣定制的——我喜歡用Markdown&#xff0c;習慣把TODO放在文件…

LakeHouse--湖倉一體架構

大家可能發現了,近些年湖倉一體數據架構被提及的頻率越來越高。各家大廠也有湖倉一體架構的實踐,也有很多公開分享。 那什么是湖倉一體?為什么出現了湖倉一體架構,換言之,它解決了以前數據倉庫、數據湖+數倉兩層架構所不能解決的什么問題? 本文會從數倉、數據湖依次介紹…

基于FPGA的實時圖像處理系統(1)——SDRAM回環測試

SDRAM回環設計 文章目錄SDRAM回環設計一、SDRAM簡介1、引腳2、內部結構框圖3、操作指令二、系統設計三、實現流程1、SDRAM接口2、FIFO設置3、內部SDRAM的控制模塊4、其他四、實現效果五、總結六、代碼1、top2、sdram_top3、sdram_ctrl一、SDRAM簡介 SDRAM英文全稱“Synchronou…

一鍵檢測接口是否存活:用 Python/Shell 寫個輕量級監控腳本

網羅開發&#xff08;小紅書、快手、視頻號同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企業從事人工智能項目研發管理工作&#xff0c;平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

優秀工具包-Hutool工具詳解

優秀工具包-Hutool工具詳解 課程概述 Hutool簡介 定位&#xff1a; 小而全的Java工具庫&#xff0c;簡化開發流程。對文件、流、加密解密、轉碼、正則、線程、XML等JDK方法進行封裝。 核心優勢&#xff1a;零依賴、高性能、中文網頁完善。 應用場景&#xff1a;Web開發、數…

《深度解構:構建瀏覽器端Redis控制臺的WebSocket協議核心技術》

Redis作為高性能的內存數據庫,其原生客戶端多依賴命令行或桌面應用,而瀏覽器端控制臺的缺失,成為制約Web化管理的關鍵瓶頸,WebSocket協議的出現,打破了HTTP協議單向通信的局限,為瀏覽器與Redis服務之間建立持久、雙向的實時連接提供了可能。本文將從協議本質、交互邏輯、…

Pushgateway安裝和部署,以及對應Prometheus調整

目錄Pushgateway簡介安裝驗證Prometheus的配置&#xff1a;其它命令Pushgateway簡介 Pushgateway 是 Prometheus 生態系統中的一個組件。主要特點是推送而非拉取&#xff1a;Prometheus 默認采用拉取&#xff08;pull&#xff09;模式收集指標&#xff0c;但 Pushgateway 允許…