实现实时查询并带有查询结果列表的输入框

这个功能主要是实现了一个可以实时查询结果的搜索框,并具备点击外部关闭搜索结果框体的功能,除了v-show和transition依托于vue实现以外其余功能都基于原生JS实现。
效果图:
在这里插入图片描述

该功能的实现主要是很久之前面试被问到过,当时没有做出来,现在兜兜转转又碰到了这个需求,索性一次性写完整,刚好新学到了composition系列事件,
首先解释一下composition系列事件,这个系列事件分为三种类型
conpositionstart在MDN中,对该事件的定义为:文本合成系统(输入法编辑器)开始新的输入合成时会触发,通俗来说就是在中文输入法开始输入时,该事件就会触发,例图如下
在这里插入图片描述
conpositionupdate该事件是文本合成系统更新输入时会触发,例图如下
在这里插入图片描述
conpositionend该事件在MDN中的定义是当文本段落的组成完成或取消时(敲下回车或者空格),compositionend 事件将被触发,例图如下
在这里插入图片描述
敲击回车后
在这里插入图片描述
实现思路:既然可以获取到用户输入的三种状态,那么就需要声明一个变量用来保存输入状态,最后在监听Input事件的回调中,根据输入状态来实现功能。而且在调试过程中发现,同为同步任务的情况下,compositionend事件的触发是要先于input事件的,那么就表明,在input事件触发的时候,一定可以通过compositionend来将用户的输入状态更新为最新状态。这就给开发带来了很大的便利。

使用composition系列事件不同于监听input事件+防抖的地方在于,如果是正在输入的情况,那么input事件在延时到期后就会触发而不会考虑到此时用户是否已经完成输入而需要触发,而composition事件在没有选择备用词或者没有按下空格/回车是不会触发的,从状态管理的角度来看,状态之间的转移更为清晰可控。
该功能主要针对的点还是在于调起文本合成器输入的情况,如果是普通的连续输入数字/英文/英文+数字的场景,则只用基本的防抖+监听input即可。
HTML部分

<van-field>
  <template #input>
    <label>
      <input name="projectName">
    </label>
  </template>
</van-field>
<transition name="van-fade">
  <div v-show="visible" class="projectList">
    <div class="van-ellipsis listItem" v-for="item in 8">
      项目{{item}}
    </div>
  </div>
</transition>

JS部分,Vue只需要声明一个变量则不再赘述

const inputDom = document.querySelector('input[name="projectName"]')
      let typing = false // 初始化为false,保证用户在连续输入英文/数字的情况下也可以正常进入input逻辑
      function handleEvent(event) {
        if (event.type === 'compositionstart') {
          typing = true
        }
        if (event.type === 'compositionend') {
          console.log('compositionend触发了')
          // 可以在这里给备选list赋值
          typing = false
        }
        if (event.type === 'input' && typing === false) {
          console.log(event.target.value);
          console.log('input触发了')
          // 可以在这里调用接口
          vm.projectData.name = inputDom.value
          vm.visible = !!event.target.value
        }
        if (event.type === 'click' && !!inputDom.value) {
          vm.visible = true
        }
      }
      inputDom.addEventListener("input", debounce(handleEvent, 1000));
      inputDom.addEventListener("compositionstart", handleEvent);
      inputDom.addEventListener("compositionend", handleEvent);
      inputDom.addEventListener('click', handleEvent)

      document.addEventListener('click', (e) => {
        if (!inputDom.contains(e.target)) {
          vm.visible = false
        }
      })

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/497183.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux:进程控制

进程创建 进程&#xff1a;内核的相关管理数据结构&#xff08;task_structmm_struct页表&#xff09;代码&#xff08;<-共享&#xff09;和数据(<-写时拷贝) fork函数初识 在 linux 中 fork 函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程…

1992-2022年经过矫正的夜间灯光数据

DMSP/OLS夜间灯光的年份是1992-2013年&#xff0c;NPP/VIIRS夜间灯光的年份是2012-2021&#xff0c;且由于光谱分辨率、空间分辨率、辐射分辨率、产品更新周期等方面的差异&#xff0c;DMSP-OLS和SNPP-VIIRS数据不兼容&#xff0c;也就是说我们无法直接对比分析DMSP-OLS和SNPP-…

Linux常用命令-文件操作

文章目录 ls基本用法常用选项组合选项示例注意事项 cd基本用法示例注意事项 pwd基本用法示例选项总结 cp基本用法常见选项示例注意事项 rm基本用法常见选项示例删除单个文件&#xff1a;交互式删除文件&#xff1a;强制删除文件&#xff1a;递归删除目录&#xff1a;交互式递归…

实验02-1 C#和ASP.NET控件:在Web窗体中输出九九乘法表

【实验内容及要求】 1. 在Web窗体中输出九九乘法表 浏览效果如图2-1所示。 图2-1 在Default.aspx.cs中编写C#代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls;public par…

项目四-图书管理系统

1.创建项目 流程与之前的项目一致&#xff0c;不再进行赘述。 2.需求定义 需求: 1. 登录: ⽤⼾输⼊账号,密码完成登录功能 2. 列表展⽰: 展⽰图书 3.前端界面测试 无法启动&#xff01;&#xff01;&#xff01;--->记得加入mysql相关操作记得在yml进行配置 配置后启动…

操作系统系列学习——多级页表与快表

文章目录 前言多级页表与快表 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划学习操作系统并完成6.0S81&#xff0c;加油&#xff01; 本文总结自B站【哈工大】操作系统 李治军&#xff08;全32讲&#xff09; 老师课程讲的非常好&#xff0c;感谢 【哈工…

PythonGUI应用:模拟航空订票小程序

在本教程中&#xff0c;我们将创建一个基本的航空订票管理系统GUI应用&#xff0c;用户可以通过图形界面执行各种操作。我们将使用Python编程语言和Tkinter库来实现此应用。 功能概述&#xff1a; 航班管理&#xff1a; 用户可以添加新的航班&#xff0c;输入航班号、起始地、目…

Convex and Semi-Nonnegative Matrix Factorizations

我们提出了非负矩阵分解&#xff08;NMF&#xff09;主题的几种新变体。考虑形式为X FG^T的因子分解&#xff0c;我们关注的是G被限制为包含非负元素的算法&#xff0c;但允许数据矩阵X具有混合符号&#xff0c;从而扩展了NMF方法的适用范围。我们还考虑了基向量F被约束为数据…

Ubuntu20.04更换镜像源------最简单的教程

本教程适用于&#xff1a;Ubuntu22.04 操作流程 打开终端&#xff0c;运行以下命令&#xff1a; sudo sed -i "shttp://.*archive.ubuntu.comhttps://mirrors.tuna.tsinghua.edu.cng" /etc/apt/sources.list 运行后即完成更改。 如果找不到22.04的镜像&#xff…

海外盲盒APP:加速开拓海外盲盒市场

盲盒是年轻群体消费中增速较快的模式&#xff0c;从前几年起&#xff0c;盲盒就在我国掀起了一股热潮&#xff0c;市场得到了迅速发展。 如今&#xff0c;盲盒经济已经遍布到了全球&#xff0c;尤其是在亚洲地区&#xff0c;盲盒消费呈现出了高速发展态势&#xff0c;在海外市…

支小蜜校园防霸凌系统的具体功能是什么?

在当今社会&#xff0c;校园霸凌问题日益严重&#xff0c;成为影响学生健康成长的一大隐患。为了应对这一问题&#xff0c;许多学校开始引入校园防霸凌系统。这一系统以其独特的功能&#xff0c;为校园安全提供了有力保障&#xff0c;为学生的健康成长创造了良好环境。 校园防…

蓝桥杯单片机快速开发笔记——PCF8591的DAC模拟电压输出

一、原理分析 PCF8591电压信号探测器&#xff1a;http://t.csdnimg.cn/R38tC IIC原理&#xff1a;http://t.csdnimg.cn/v4dSv IIC指令&#xff1a;http://t.csdnimg.cn/RY6yi HC573/HC138&#xff1a;http://t.csdnimg.cn/W0a0U 数码管&#xff1a;http://t.csdnimg.cn/kfm9Y 独…

反序列化动态调用 [NPUCTF2020]ReadlezPHP1

在源代码上看到提示 访问一下看看 代码审计一下 <?php #error_reporting(0); class HelloPhp {public $a;public $b;public function __construct(){$this->a "Y-m-d h:i:s";$this->b "date";}public function __destruct(){$a $this->a;…

编译安装飞桨fastdeploy@FreeBSD(失败)

FastDeploy是一款全场景、易用灵活、极致高效的AI推理部署工具&#xff0c; 支持云边端部署。提供超过 &#x1f525;160 Text&#xff0c;Vision&#xff0c; Speech和跨模态模型&#x1f4e6;开箱即用的部署体验&#xff0c;并实现&#x1f51a;端到端的推理性能优化。包括 物…

上传镜像到仓库

上传镜像到公开仓库 1、给要上传的镜像打标签 # 从206节点上传镜像到仓库&#xff08;201&#xff09;magedu项目&#xff0c;查看206镜像 [rootk8s-node2 ~]# docker images REPOSITORY TAG IMAGE ID CRE…

arp 协议

数据链路层 我们之前学习到的 IP 协议解决的是数据跨网络传输的问题。 数据链路层解决的是&#xff1a;直接相连的主机&#xff0c;进行数据交付的问题&#xff01; 直接相连的设备包括我们的电脑&#xff0c;路由器等等哈&#xff01; 我们在网络基础那篇文章中讲过什么是以…

OneDiff加速“图生生”,解锁电商AI图像处理新范式

2024年&#xff0c;电商领域正目睹生成式AI软件工具的飞速发展&#xff0c;AI Generated Content (AIGC) 技术在电商应用中的普及率正在显著提升&#xff0c;这类技术能够显著提高商业运营的效率&#xff0c;并促进业绩的稳步增长。 硅基流动研发的图片/视频生成推理引擎OneDif…

近线数仓优化改造

近线数仓优化改造 1. 背景2. 优化3. 改造3.1. 重构3.2. 优化 1. 背景 大概就是有那么一个数仓&#xff0c;然后简略结构如下&#xff1a; #mermaid-svg-PVoUzuQhj2BK7Qge {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid…

Linux系统中的软件管理

如何让虚拟机上网 # 1.Linux中软件包的类型 # &#xff08;1&#xff09;DEB #UBlinux DEBlinux &#xff08;2&#xff09;RPM #redhat centOS fadora &#xff08;3&#xff09;bz2|gz|xz #1.需要源码安装需要编译 #2.绿色软件&…

PDFgear:一款免费的PDF编辑、格式转化软件

日常办公中&#xff0c;很多朋友都会接触到PDF文件。把文件转化成PDF是保留文件格式、防范别人修改常用的方法。但是很多人会为PDF文件的生成、压缩、编辑和格式转化而头疼&#xff0c;还有人为了能把PDF转化成Word还购买了不少付费的软件。 为了解决大家这个痛点&#xff0c;…