在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 window对象属性整理
Oct 24 Javascript
多浏览器兼容的获取元素和鼠标的位置的js代码
Dec 15 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
Jan 24 Javascript
javascript限制用户只能输汉字中文的方法
Nov 20 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
Jan 13 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
Apr 06 Javascript
javascript实现checkbox复选框实例代码
Jan 10 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
May 10 Javascript
微信小程序实现卡片层叠滑动效果
Jun 21 Javascript
vue动态子组件的两种实现方式
Sep 01 Javascript
Vue 封装防刷新考试倒计时组件的实现
Jun 05 Javascript
vue3.0生命周期的示例代码
Sep 24 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
苏联队长,苏联超人蝙蝠侠,这些登场的“山寨”英雄真的很严肃
2020/04/09 欧美动漫
关于PHP中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
PDO::getAttribute讲解
2019/01/28 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
JavaScript中的类继承
2010/11/25 Javascript
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
2011/12/08 Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
document.getElementBy(&quot;id&quot;)与$(&quot;#id&quot;)有什么区别
2013/09/22 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
Django objects的查询结果转化为json的三种方式的方法
2018/11/07 Python
pymongo中group by的操作方法教程
2019/03/22 Python
深入浅析Python中的迭代器
2019/06/04 Python
使用python采集Excel表中某一格数据
2020/05/14 Python
Python基于pandas绘制散点图矩阵代码实例
2020/06/04 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
详解CSS3浏览器兼容
2016/12/14 HTML / CSS
中粮集团旗下食品网上购物网站:我买网
2016/09/22 全球购物
.NET remoting的两种通道是什么
2016/05/31 面试题
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
《地震中的父与子》教学反思
2014/04/10 职场文书
工厂搬迁方案
2014/05/11 职场文书
付款委托书范本
2014/10/05 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
初中毕业生感言
2015/07/31 职场文书
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
一文搞懂Redis中String数据类型
2022/04/03 Redis