文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Vue3如何实现全局搜索框

2023-07-05 00:20

关注

这篇文章主要介绍“Vue3如何实现全局搜索框”,在日常操作中,相信很多人在Vue3如何实现全局搜索框问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3如何实现全局搜索框”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一. 文件准备

前期你需要准备三个文件,来完成这个全局搜索框

Vue3如何实现全局搜索框

二. 搜索框的样式

样式问题不是本文的重点,你可以花费五分钟在 SearchBar.vue 文件内速写一个非常简易的正方形 div 包裹着一个 input 标签即可快速进行下面的学习。

但是首先我们需要理清思路,这个组件是会出现在我们页面的最顶部的,所以它组件内部需要用到绝对布局。我们去 SearchBar.vue 去设置一个样式给最外层的 div,这里其它样式的写法使用的是 Uno CSS,没用过的小伙伴也不需要担心,它只是单纯的样式,和本文中心内容不牵扯。(CSS写成计算属性在这个场景也毫无特殊意义,只是单纯设计时考虑多了)Vue3如何实现全局搜索框Vue3如何实现全局搜索框

Vue3如何实现全局搜索框

三. 渲染函数 hrender 函数(重点)

三. 编写 SearchBarMaker 构造函数和 present 方法

四. 优化 SearchBarCreator 构造函数的代码逻辑

写到这里的时候,你可能发现了一个小问题,当我一直去按搜索按钮的时候,它会出现多个搜索框,但是我们希望的是它在全局只能出现一个搜索框。换个角度思考,也就是同一时间,这个被我们 new 出来的 SeachBar 实例只能出现一个。思考一下?,我加一个变量,isShowing 是否正在被展示 ,如果正在被展示的话,那么用户再次调用 present 的时候,我就去调用实例自身的 dismiss 方法让它消失,是否可行呢?
Vue3如何实现全局搜索框

测试一下:
Vue3如何实现全局搜索框
OK,看来完美解决当前的问题了。

五. 编写全局唯一的调用实例

六. 添加全局的快捷键 Command + K

这里我直接公布写法,js 允许我们这样判断是否同时按下两个按键。Vue3如何实现全局搜索框

七. 添加出现的动画

八. 自动聚焦

在弹出框的 input 框实现自动聚焦相比于之前讲的就非常简单了,我在这里一笔带过了。只需要在 nextTick 中调用 input 本身的 focus 方法即可。
Vue3如何实现全局搜索框

源码

import { h, render } from "vue"import SearchBar from "./SearchBar.vue"class SearchBarCreator {  container: HTMLElement  appElement: HTMLElement | null  showing: boolean  _dismiss: () => void  constructor() {    this.container = document.createElement("div")    this.showing = false    this.appElement = document.body.querySelector("#app")    this.present.bind(this)    this.dismiss.bind(this)    this._dismiss = this.dismiss.bind(this)  }  present() {    if (this.showing) {      this.dismiss()    } else {      const SearchBar = h(h(SearchBar))      render(SearchBar, this.container)      const searchBarWrapperDOM =        this.container.querySelector("#searchBarWrapper")      searchBarWrapperDOM?.classList.add("animate-searchInputAnimation")      document.body.insertBefore(this.container, document.body.firstChild)      this.showing = true      this.appElement?.addEventListener("click", this._dismiss)    }  }  dismiss() {    if (this.showing && this.container) {      render(null, this.container)      document.body.removeChild(this.container)      this.showing = false      this.appElement?.removeEventListener("click", this._dismiss)    } else {      console.log("不需要关闭")    }  }}

到此,关于“Vue3如何实现全局搜索框”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯