在vue中根据光标的显示与消失实现下拉列表


Posted in Javascript onSeptember 29, 2019

重点知识

mousedown事件:mousedown的执行顺序大于blur事件

HTML代码

<template>
 <div>
  <input ref="search" @focus="showList(true)" v-model="search" @blur="showList(false)"/>
  <ul v-if="state">
   <li style="width: 100px;background: goldenrod;color: #fff" @mousedown="handleSearch(1)">1</li>
   <li style="width: 100px;background: goldenrod;color: #fff" @mousedown="handleSearch(2)">2</li>
   <li style="width: 100px;background: goldenrod;color: #fff" @mousedown="handleSearch(3)">3</li>
   <li style="width: 100px;background: goldenrod;color: #fff" @mousedown="handleSearch(4)">4</li>
  </ul>
 </div>
</template>

通过上面的代码生成了我们的基本下拉列表,接下来是data数据的解析:

data() {
   return {
    search: '',//搜索框值
    state: false,//是否显示下拉列表
    isShowList: false,//判断是点击内容隐藏光标的,还是点击空白隐藏光标的
   }
  },

详细函数解析:

//显示光标和失去光标事件  
   showList(state) {//state用于判断是否是得到光标事件还是失去光标事件
    if (state) {
     this.state = state//显示下拉列表
    } else {
     if(this.isShowList){//this.isShowList用于判断是否是下拉列表里的内容点击的事件
      //把this.isShowList赋值为false让点击空白区能再次触发失去光标事件
      this.isShowList = false
      //让input一直都有光标事件
      this.$refs.search.focus()
     }else {
      this.state = state //隐藏下拉框
     }
    }
   },
   handleSearch(data) {//data搜索的数据
    this.search = data//赋值
    this.isShowList = true//这是区别是否是内容区的点击事件
   }

详细过程

  1. 点击input标签触发showList(true)方法,有它是true直接执行 this.state = state//显示下拉列表
  2. 点击下拉框内容触发handleSearch(data)方法 把 this.isShowList = true 标注这是在下拉框内容的点击事件,将不会隐藏下拉框
  3. 最后通过blur触发showList(false),他将根据this.isShowList判断是否隐藏下拉框,当this.isShowList是true时,执行this.isShowList = false 把this.isShowList回复原样,让点击空白区也能隐藏下拉框,
  4. this.$refs.search.focus()让input再次获得光标事件,这将为点击空白区能触发失去光标事件让下拉框隐藏起来

参考:https://3water.com/article/171151.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中实现依赖注入的思路分享
Jan 15 Javascript
JS实现可点击展开与关闭的左侧广告代码
Sep 02 Javascript
谈谈js中的prototype及prototype属性解释和常用方法
Nov 25 Javascript
JS闭包用法实例分析
Mar 27 Javascript
jQuery zTree树插件动态加载实例代码
May 11 jQuery
jQuery动态添加.active 实现导航效果代码思路详解
Aug 29 jQuery
vue-cli3.0使用及部分配置详解
Aug 29 Javascript
vue-router 手势滑动触发返回功能
Sep 30 Javascript
vue element upload组件 file-list的动态绑定实现
Oct 11 Javascript
微信小程序swiper使用网络图片不显示问题解决
Dec 13 Javascript
JavaScript 严格模式(use strict)用法实例分析
Mar 04 Javascript
详细分析Node.js 模块系统
Jun 28 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
Sep 29 #Javascript
微信小程序 行的删除和增加操作实现详解
Sep 29 #Javascript
微信小程序 轮播图实现原理及优化详解
Sep 29 #Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
Sep 29 #Javascript
React-redux实现小案例(todolist)的过程
Sep 29 #Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
Sep 29 #Javascript
在Layui中实现开关按钮的效果实例
Sep 29 #Javascript
You might like
php str_pad 函数使用详解
2009/01/13 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
js脚本学习 比较实用的基础
2006/09/07 Javascript
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
javascript removeChild 使用注意事项
2009/04/11 Javascript
jquery中this的使用说明
2010/09/06 Javascript
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
2010/11/25 Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
2011/05/24 Javascript
jQuery使用元素属性attr赋值详解
2015/02/27 Javascript
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
js实现单张图片平移切换效果
2017/10/11 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
vue-cli 为项目设置别名的方法
2019/10/15 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
javascript 函数的暂停和恢复实例详解
2020/04/25 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
python使用socket进行简单网络连接的方法
2015/04/29 Python
Python制作简单的网页爬虫
2015/11/22 Python
python中的编码知识整理汇总
2016/01/26 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
python缩进长度是否统一
2020/08/02 Python
联想瑞士官方网站:Lenovo Switzerland
2017/11/19 全球购物
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
工程技术员岗位职责
2014/03/02 职场文书
教师辞职书范文
2015/02/26 职场文书
九年级历史教学反思
2016/02/19 职场文书
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技