在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 相关文章推荐
让任务管理器中的CPU跳舞的js代码
Nov 01 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
May 19 Javascript
jquery 实现两Select 标签项互调示例代码
Sep 25 Javascript
浅谈javascript中字符串String与数组Array
Dec 31 Javascript
Javascript 实现简单计算器实例代码
Oct 23 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
Dec 22 Javascript
angularjs点击图片放大实现上传图片预览
Feb 24 Javascript
webpack将js打包后的map文件详解
Feb 22 Javascript
详解jQuery获取特殊属性的值以及设置内容
Nov 14 jQuery
图片文字识别(OCR)插件Ocrad.js教程
Nov 26 Javascript
基于vue.js组件实现分页效果
Dec 29 Javascript
微信小程序实现Swiper轮播图效果
Nov 22 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权重计算方法代码分享
2014/01/09 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
2015/12/07 PHP
学习php设计模式 php实现观察者模式(Observer)
2015/12/09 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
基于jquery 的一个progressbar widge
2010/10/29 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
js的Boolean对象初始值示例
2014/03/04 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
Javascript实现异步编程的过程
2018/06/18 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
layer.confirm取消按钮绑定事件的方法
2018/08/17 Javascript
微信小程序实现bindtap等事件传参
2019/04/08 Javascript
js实现九宫格布局效果
2020/05/28 Javascript
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
python简单获取数组元素个数的方法
2015/07/13 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
python list多级排序知识点总结
2019/10/23 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
构造器Constructor是否可被override?
2013/08/06 面试题
.NET现在共支持多少种语言
2014/02/26 面试题
abstract class和interface有什么区别
2013/08/04 面试题
挂科检讨书范文
2014/02/20 职场文书
党校个人自我鉴定范文
2014/03/28 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
小学生安全保证书
2015/05/09 职场文书
2016年庆祝六一儿童节活动总结
2016/04/06 职场文书
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL