基于Vue+ElementPlus自定义带历史记录的搜索框组件

前言

基于Vue2.5+ElementPlus实现的一个自定义带历史记录的搜索框组件

效果如图:

基本样式:

获取焦点后:

这里的历史记录默认最大存储10条,同时右侧的清空按钮可以清空所有历史记录。

同时搜索记录也支持点击搜索,按下enter也可以直接搜索

vue代码

为什么叫vue2.5是因为我在vue3的框架下同时写vue2和vue3的语言。

这里要提前在main.js中提前注册element-plus中的图标,或者按需引入也可以。

这里我通过将历史记录直接存入到一个列表,然后存储在本地存储,每次有新的搜索记录时,unshift列表头部元素,这样每次在最上方展示的历史记录就是最新的,同时也方便删除旧的历史记录时直接pop掉即可。

实现起来比较简单,可以根据不同需求应用不同场景。

<template><!-- 搜索框 --><div class="search-area" ref="searchbar"><el-input v-model="searchcontent" style="max-width: 500px;width: 500px;" :placeholder="placeholder"class="input-with-select" maxlength="56" size="large" @focus="isshow = true" @keydown.enter="searchblog"><template #append><el-button style="background-color: #fc5531;" size="large" @click="searchblog" :disabled="isclick"><span style="color: white;font-weight: 500;display: flex;"><el-icon style="margin-right: 10px;"><Search></Search></el-icon>搜索</span></el-button></template></el-input><div class="search-drop-menu" v-show="isshow"><div class="search-history" v-show="searchhistorylist.length > 0"><div class="search-title">搜索历史<span class="search-clear" @click="clearhistory"><el-icon><Delete></Delete></el-icon><span>清空</span></span></div><div><div v-for="(item, index) in searchhistorylist" :key="index" class="history-item"><div @click="searchhistory(item)">{{ item }}</div></div></div></div><div class="search-hot"><!-- 留着做推荐 --><div class="search-title">搜索发现</div></div></div></div>
</template><script>import { ElMessage } from 'element-plus';export default {name: 'SearchInput',data() {return {searchcontent: '',//搜索内容placeholder: '请输入',//以后有了推荐系统可以预置用户想搜索的内容isshow: false,searchhistorylist: [],   //搜索历史列表}},methods: {//搜索博客内容searchblog() {//先判断输入是否为空if (this.searchcontent == '') {ElMessage({ type: 'info', message: '输入不能为空', duration: 1500 });return;}//隐藏搜索框this.isshow = false;//加入到搜索历史列表this.searchhistorylist.unshift(this.searchcontent);//判断列表长度是否大于10 如果大于了就删除一个最旧的while (this.searchhistorylist.length > 10) {this.searchhistorylist.pop();}//保存到本地存储localStorage.setItem("search_history_list", JSON.stringify(this.searchhistorylist));//跳转搜索内容页面location.href = '/blog/search?q=' + this.searchcontent;},//搜索历史内容searchhistory(val) {//隐藏搜索框this.isshow = false;//加入到搜索历史列表this.searchhistorylist.unshift(val);//判断列表长度是否大于10 如果大于了就删除一个最旧的while (this.searchhistorylist.length > 10) {this.searchhistorylist.pop();}//保存到本地存储localStorage.setItem("search_history_list", JSON.stringify(this.searchhistorylist));//跳转搜索内容页面location.href = '/blog/search?q=' + val;},//清除历史记录clearhistory() {this.searchhistorylist = [];localStorage.removeItem('search_history_list');ElMessage({ type: 'success', message: '历史记录清除成功', duration: 1500 });}},mounted() {//获取用户搜索历史let list = JSON.parse(localStorage.getItem("search_history_list")) || null;if (list == null) {console.log("无本地搜索历史");return;}this.searchhistorylist = list;//设置一个监听 点击搜索框其他区域就隐藏document.addEventListener("click",(e) => {if (e.target.className=='el-main') {this.isshow = false;}},true);}}
</script><style scoped>
.search-drop-menu {position: absolute;width: 100%;-webkit-box-sizing: border-box;box-sizing: border-box;padding: 8px 0 12px;font-size: 14px;font-weight: 400;-webkit-box-shadow: 0 0 10px 2px rgb(0 0 0 / 6%);box-shadow: 0 0 10px 2px rgb(0 0 0 / 6%);border-radius: 0 0 4px 4px;background: #fff;color: #555666;top: 39px;left: 0;min-height: 200px;height: auto;text-align: left;z-index: 9999; /* 设置一个很高的值确保在最上层 */}.search-history {width: 50%;float: left;
}.search-hot {width: 50%;float: left;
}.search-title {padding-left: 16px;height: 32px;font-size: 12px;color: #fc5531;line-height: 32px;position: relative;
}.history-item {overflow: hidden;white-space: nowrap;text-overflow: ellipsis;position: relative;display: block;width: 100%;padding: 0 16px 0 16px;-webkit-box-sizing: border-box;box-sizing: border-box;height: 32px;line-height: 32px;cursor: pointer;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-pack: justify;-ms-flex-pack: justify;justify-content: space-between;-webkit-box-align: center;-ms-flex-align: center;align-items: center;
}.search-clear {right: 0px;color: #ccccd8;position: absolute;height: 100%;right: 16px;top: 0;cursor: pointer;
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Linux给磁盘扩容(LVM方式)

Linux给磁盘扩容&#xff08;LVM方式&#xff09; 最近测试性能&#xff0c;在本地打数据时&#xff0c;发现磁盘空间不足&#xff0c;于是想手动给/挂载点添加空间。这里介绍通过LVM方式快速给磁盘扩容。 LVM:是一种技术&#xff0c;方便管理磁盘。如果不用LVM&#xff0c;那…

springboot2集成东方通tongweb嵌入式版

由于最近项目需要国产化信创改造&#xff0c;引入东方通tongweb 联系东方通厂家 &#xff0c;将依赖导入到maven仓库&#xff0c;并获取嵌入式版license文件修改pom.xml&#xff0c;引入依赖&#xff0c;注意springboot版本&#xff0c;这里以springboot2举例 首先移除springb…

Xinlinx FPGA内的存储器BRAM全解

目录 一、总体概述1.7系列FPGA的BRAM特点2.资源情况 二、BRAM分类1.单端口RAM2.简单双端口RAM3.真双端口RAM 三、BRAM的读写1、Primitives Output Registers读操作注意事项2.三种写数据模式&#xff08;1&#xff09;Write_First&#xff08;2&#xff09;Read_First&#xff0…

【学习】软件测试自动化,是未来的趋势还是当前的必需

在当今快速迭代的软件开发周期中&#xff0c;速度和质量成为了企业生存的关键。随着DevOps实践的普及和持续集成/持续部署&#xff08;CI/CD&#xff09;流程的标准化&#xff0c;软件测试自动化已经从未来的趋势转变为当前的必要性。本文将探讨自动化测试的现状、必要性以及其…

大模型训练及推理【硬件选型指南】及 GPU 通识

我们在做大模型应用部署时&#xff08;如训练、微调、RAG&#xff09;&#xff0c;往往需要在前期就分析好硬件选型指标&#xff0c;或者我们给客户报方案之前&#xff0c;可能你已经有了一个方案&#xff0c;但是由于实践经验缺乏&#xff0c;不知道在硬件上该如何评估并上报。…

invidia-smi占用显存,无法显示PID

如果是动用了子线程创建进程&#xff0c;比如利用accelerate训练脚本&#xff0c;那么大概率可以通过这种方式解决&#xff1a;nvidia-smi没有进程&#xff0c;但是显存占用_nvidia-smi有的卡是0%-CSDN博客 如果这种方法不可用&#xff0c;请尝试直接查询所有python进程&#x…

react v18 项目初始化

按照以下命令进行傻瓜式操作即可&#xff1a; 全局安装脚手架工具&#xff1a; npm install -g create-react-app创建项目my-react-app&#xff1a; create-react-app my-react-app安装 antd: yarn add antd安装 react-router-dom&#xff1a; yarn add react-router-dom启动项…

[Qt的学习日常]--初识Qt

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、Qt的基本…

鸿蒙(HarmonyOS)性能优化实战-多线程共享内存

概述 在应用开发中&#xff0c;为了避免主线程阻塞&#xff0c;提高应用性能&#xff0c;需要将一些耗时操作放在子线程中执行。此时&#xff0c;子线程就需要访问主线程中的数据。ArkTS采用了基于消息通信的Actor并发模型&#xff0c;具有内存隔离的特性&#xff0c;所以跨线…

4.23日总结(项目总结)

1.项目&#xff1a; 今日项目通过一个在登录界面的一个静态变量&#xff0c;完成了区分老师和学生&#xff0c;能够分开老师和学生&#xff0c;并且不同身份的人进去会有不同的显示&#xff0c;以及登录链接主界面&#xff0c;还有学生和老师的不同的表&#xff0c;其次就是创…

葡萄书--关系图卷积神经网络

异质图和知识图谱 同质图与异质图 同质图指的是图中的节点类型和关系类型都仅有一种 异质图是指图中的节点类型或关系类型多于一种 知识图谱 知识图谱包含实体和实体之间的关系&#xff0c;并以三元组的形式存储&#xff08;<头实体, 关系, 尾实体>&#xff0c;即异…

用Excel做一个功能完备的仓库管理系统

1 基本设计思路 用到的Excel技术&#xff1a;sumif, vlookup, 表格(table)。基本思路&#xff1a;在有基础的商品、仓库等信息的情况下&#xff0c;对商品的每一个操作都有对应的单据&#xff0c;然后再汇总统计。标识&#xff1a;为了在不同的维度统计数量&#xff0c;各单据…

Abaqus2024 安装教程(附免费安装包资源)

鼠标右击软件压缩包&#xff0c;选择“解压到Abaqus2024”。 鼠标右击“此电脑”&#xff0c;选择“属性”。 点击“高级系统设置”。 点击“环境变量”。 点击“新建”。 变量名输入&#xff1a;NOLICENSECHECK 变量值输入&#xff1a;true 然后点击“确定”。 点击“确定”。…

羊大师解析,夏日消暑羊奶来帮忙

羊大师解析&#xff0c;夏日消暑羊奶来帮忙 炎炎夏日&#xff0c;烈日当空&#xff0c;人们总是寻找各种方式来消暑降温。除了常见的冷饮、空调等&#xff0c;其实还有一种天然、健康的饮品可以帮助我们度过酷暑——那就是羊奶。 羊奶作为一种营养丰富的天然饮品&#xff0c;不…

【git】多仓库开发

通常我们习惯了在单个仓库下多分支开发&#xff0c;最近用了多仓库开发&#xff0c;我拿一个开源项目举例&#xff0c;总结一下基本流程。 1.fork项目到自己仓库 2.把自己仓库项目pull到本地 3.在本地新建开发分支 git checkout -b dev 4.修改/添加分支对应的远程仓库 修…

小案例:ToolBar+选项菜单

使用选项菜单&#xff0c;一般是用于做单选&#xff0c;需要重写方法&#xff1a; public boolean onCreateOptionsMenu(Menu menu) 如果想要实现事件监听&#xff0c;则采用基于回调的事件监听机制&#xff0c;可以监听到具体是哪一项被选中。即重写方法&#xff1a; publi…

Kafka学习笔记(二、linux和docker安装及使用demo)

1.安装启动 1.1.下载解压 官网下载地址将下载的tar包上传到服务器一个目录&#xff0c;然后解压$ tar -xzf kafka_2.13-3.7.0.tgz $ cd kafka_2.13-3.7.01.2. 启动环境 需安装Jdk8&#xff0c;Kafka可以使用ZooKeeper或KRaft启动。 ZooKeeper启动 运行如下命令&#xff0c;…

windows系统下python开发工具安装

一. 简介 前一篇文章学习了安装 python解释器&#xff0c;文章如下&#xff1a; windows系统下python解释器安装-CSDN博客 本文来学习如何下载安装 python开发工具 PyCharm。 二. python开发工具 PyCharm下载安装 1. PyCharm官网 PyCharm开发工具 PyCharm为 python代码…

【学习笔记二十四】EWM补货策略和自动补货配置

一、EWM补货策略概述 1.计划补货 ①以联机或批处理模式启动 ②根据最大和最小数量计算补货 ③仅当库存量低于最低数量时才开始 ④四舍五入至最小补货数量的倍数 2.自动补货 ①在WT确认期间启动 ②根据最大和最小数量计算补货 ③只有当库存量低于最低数量时才开始 ④四舍…

OpenWRT磁盘扩容(PVE虚拟机方案)

官方扩容指导文档 PVE给虚拟机磁盘扩容 给虚拟机磁盘扩容&#xff0c;选中OpenWRT的硬盘&#xff0c;随后选择调整大小 输入增量大小&#xff0c;即增加多少磁盘空间给硬盘。这里我选择增加4G 进入OpenWRT控制台界面安装一些linux常用查看磁盘的工具&#xff08;也可以通过网…