基于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://www.mzph.cn/news/827711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

371D - Vessels

思路&#xff1a;用并查集维护&#xff0c;如果当前容器没有满&#xff0c;就指向自己&#xff0c;否则指向下一个容器。 这样就可以快速 find 到下一个没有满的容器&#xff0c;从而模拟询问 1。 代码&#xff1a; void solve(){int n;cin >> n;vector<int>p(n …

leetcode:滑动窗口----3. 无重复字符的最长子串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为…

算法竞赛相关问题总结记录

前言 日常在校生或者是工作之余的同学或多或少都会参加一些竞赛,参加竞赛一方面可以锻炼自己的理解与实践能力&#xff0c;也能够增加自己的生活费&#xff0c;竞赛中的一些方案也可以后续作为自己论文的base,甚至是横向课题的框架。在算法竞赛中算法的差别个人感觉差距都不大&…

一招搞定“找不到xinput1_3.dll,无法继续执行代码”问题

在我们日常使用电脑进行各类工作的过程中&#xff0c;特别是在运行一些关键性软件以完成特定任务时&#xff0c;电脑屏幕上突然弹出一条醒目的错误提示信息&#xff1a;“由于找不到xinput1_3.dll,无法继续执行代码”。这个错误通常发生在使用DirectInput库时&#xff0c;而xin…

BFS解决FloodFill算法:(Leetcode:733. 图像渲染)

题目链接&#xff1a;733. 图像渲染 - 力扣&#xff08;LeetCode&#xff09; 使用广度优先遍历算法解决该问题&#xff1a; 从初始位置开始搜索&#xff0c;初始位置符合条件就入栈&#xff0c;并修改初始位置值。初始位置出栈。 再从初始位置开始广度优先搜索&#xff08;…

阿赵UE学习笔记——30、HUD简单介绍

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎&#xff0c;这次来学习一下HUD的基础使用。 一、 什么是HUD HUD(Head-Up Display)&#xff0c;也就是俗称的抬头显示。很多其他领域里面有用到这个术语&#xff0c;比如开车的朋友可能会接触过&#xf…

【Camera Sensor Driver笔记】一、Sensor基本概念

时钟 sensor clock sensor的输入时钟 MCLK 输出时钟&#xff1a; 1. VTPixelClock&#xff1a;会影响sensor内部的帧率、曝光 VTPixelClock(vt_clk)Video Timing Clock, From sensor PLL VTPixelClock Framelengthlines x LinelengthPixelClock x FPS Framelengthlines L…

页面加载事件

2.1窗口加载事件 1.window.οnlοadfuction(){} 或者 window.addEventListerner(‘load’,function(){}) doucument.addEventListner(DOMContentLoaded,fuction(){})这个反应更快些

是德软件89600 RFID使用笔记

文章目录 1、进入RFID软件&#xff1a;2、RFID软件解调设置项3、如何查看一段指令数据 本文是日常工作的笔记分享。 lauch VSA&#xff08;矢量频谱分析&#xff09;后会出现以下界面&#xff1a; 当然这是因为频谱仪的输入有信号才显示如下&#xff1a; 否则就显示频谱仪的噪…

初识C++ · 类和对象(中)(2)

前言&#xff1a;上篇文章已经介绍了6个默认成员函数中的3个函数&#xff0c;分别是构造函数&#xff0c;析构函数&#xff0c;拷贝构造函数&#xff0c;本文介绍的是后三个&#xff0c;赋值运算符重载&#xff0c;const成员函数&#xff0c;取地址操纵符重载。 目录​​​​​…

通过使用XShell工具、Nginx环境实现服务器项目构建与发布

前言&#xff1a; 在信息化和数字化的今天&#xff0c;网站和应用的构建与发布已成为企业发展的重要一环。为了确保项目的顺利上线和稳定运行&#xff0c;选择合适的工具和环境至关重要。本文将详细介绍如何通过XShell工具以及Nginx环境来实现服务器项目的构建与发布&#xff0…

datax介绍和用法

Datax 简介 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台&#xff0c;实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。 DataX本身作为数据同步框架&…

智慧图书馆为什么用rfid电子标签而不是磁条

智慧图书馆一般都会使用RFID技术&#xff0c;而不是磁条。以下是几个原因&#xff1a; 1. 效率更高&#xff1a;RFID技术可以实现非接触式读取&#xff0c;图书馆工作人员可以同时读取多本书的信息&#xff0c;大大提高了借还书的效率。 2. 数据量更大&#xff1a;RFID标签可以…

大模型-入门小知识

大模型是什么 大量参数&#xff08;上亿&#xff09;深度学习模型 人工只能包含机器学习&#xff0c;深度学习,深度学习包括大模型 单个神经元的计算模型&#xff1a; 大模型是怎么训练的 之前是算法&#xff08;神经网络&#xff09;----> 训练&#xff08;门槛降低&…

LlamaIndex代理的逐步执行框架,包括代理运行器和代理工作者

原文地址&#xff1a;llamaindex-agent-step-wise-execution-framework-with-agent-runners-agent-workers 2024 年 4 月 15 日 LlamaIndex lower-level 代理 API 提供了一系列功能&#xff0c;超出了仅从头到尾执行用户查询的范围。 介绍 LlamaIndex 提供了一个全面的代理 API…

设计模式- 中介者模式(Mediator)

1. 概念 中介者模式&#xff08;Mediator Pattern&#xff09;&#xff0c;是一种对象行为型模式。该模式的主要目的是定义一个中介对象来封装一系列对象之间的交互&#xff0c;使原有对象之间的耦合变得松散&#xff0c;并且可以独立地改变它们之间的交互。 2. 原理结构图 抽…

Python Selenium无法打开Chrome浏览器处理自定义浏览器路径

问题 在使用Python Selenium控制Chrome浏览器操作的过程中&#xff0c;由于安装的Chrome浏览器的版本找不到对应版本的驱动chromedriver.exe文件&#xff0c;下载了小几个版本号的驱动软件。发现运行下面的代码是无法正常使用的&#xff1a; from selenium import webdriver …

FPGA“题目周周练”活动来啦!

Hi&#xff0c;各位编程精英er~ 不知道大家的FPGA学习之旅到达哪一个阶段了呢&#xff1f;又在这个过程中遇到了哪些困惑&#xff1f; 作为一门高度专业化且充满挑战的技术&#xff0c;FPGA的学习是一场不断思考、认知、持续深化的过程。在这个过程中&#xff0c;思维的敏捷和…

【vue2】实现微信截图(复制图片)在项目内可粘贴

需求 后台管理在上传图片地方需要将复制的图片粘贴上传 一、添加事件 在原有上传组件的基础上添加 paste事件 二、方法 onPaste(e) {const items (e.clipboardData || window.clipboardData).items;let blob null;for (let i 0; i < items.length; i) {if (items[i].ty…

034——从GUI->Client->Server->driver实现读写EEPROM

目录 1、修改GUI 2、修改client 3、 修改server 4、 修改driver_handele 5、 测试和提交 1、修改GUI 之前叫IIC&#xff0c;我们其实是借助EEPROM来测试IIC是不是好用所以名称改一改 长得有点奇怪 这样虽然一样长了但是还是很奇怪。 就先这样吧 layout_l [[tool.name(N…