【前端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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 允许…