在Vue组件中获取全局的点击事件方法


Posted in Javascript onSeptember 06, 2018

使用场景:

在Vue组件中点击某元素之外的地方移除该元素

在Vue组件中获取全局的点击事件方法

需求:

如上图所示,“用户列表”页面有三个Vue组件组成,分别是“菜单组件”,“导航组件”和“列表组件”。其中“列表组件”中包含一个“下拉菜单”,当我们点击“下拉菜单”以外的区域隐藏下拉菜单。

解决方法一:

出现“下拉菜单”的同时,建一个透明的遮罩层,然后只有“下拉菜单”可以点,点击遮罩层就隐藏。

缺点:z-index层数要控制好,还有就是如果点击其他功能按钮,会失效,因为有遮罩层,导致要点击两次才有效。

解决方法二:

局部监听,给“列表组件”最外层的盒子加个点击事件,隐藏下拉菜单。并且对“下拉菜单”的事件要阻止事件冒泡。

缺点:点击“列表组件”区域有效,点击“菜单组件”和“导航组件”区域无效。

解决方法三(推荐):

第一步:定义Vue全局点击函数

// 定义全局点击函数
Vue.prototype.globalClick = function (callback) {
 document.getElementById('main').onclick = function () {
 callback();
 };
};

tips:

1、参数为点击的回调函数。

2、Vue中通过getElementsByTagName获取不到body节点,还不知道是什么原因。

第二步:在组件中监听全局的点击事件

mounted: function () {
 this.globalClick(this.moreSetupMenuRemove);
}

tips:mounted是Vue生命周期钩子中的DOM渲染完成阶段。

第三步:进行操作

// 移除操作
moreSetupMenuRemove () {
 this.$refs.moreSetupMenu.style.display = 'none';
},

如果有更好的方法,欢迎交流!

以上这篇在Vue组件中获取全局的点击事件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 全角转半角部分
Oct 28 Javascript
不要在cookie中使用特殊字符的原因分析
Jul 13 Javascript
使用JavaScript实现旋转的彩圈特效
Jun 23 Javascript
JavaScript中的继承之类继承
May 01 Javascript
js实现精确到毫秒的倒计时效果
Aug 05 Javascript
学习使用jQuery表单验证插件和日历插件
Feb 13 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
Aug 17 Javascript
vue 引入公共css文件的简单方法(推荐)
Jan 20 Javascript
基于Vue 实现一个中规中矩loading组件
Apr 03 Javascript
Vue 2.0 中依赖注入 provide/inject组合实战
Jun 20 Javascript
浅析vue中的provide / inject 有什么用处
Nov 10 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
Jun 05 Javascript
jQuery实现基本动画效果的方法详解
Sep 06 #jQuery
JavaScript函数、闭包、原型、面向对象学习笔记
Sep 06 #Javascript
Vue中使用clipboard实现复制功能
Sep 05 #Javascript
vue-cli3.0配置及使用注意事项详解
Sep 05 #Javascript
Vue-cli@3.0 插件系统简析
Sep 05 #Javascript
vue实现点击选中,其他的不选中方法
Sep 05 #Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
Sep 05 #Javascript
You might like
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
2011/08/09 PHP
简单实用的.net DataTable导出Execl
2013/10/28 PHP
PHP图片库imagemagick安装方法
2014/09/23 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
2015/12/11 PHP
php strftime函数的详细用法
2018/06/21 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
javascript获取dom的下一个节点方法
2014/09/05 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
web前端vue之vuex单独一文件使用方式实例详解
2018/01/11 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
Python爬取网页中的图片(搜狗图片)详解
2017/03/23 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
python基础教程项目五之虚拟茶话会
2018/04/02 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
2020/03/04 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
jupyter notebook更换皮肤主题的实现
2021/01/07 Python
转党组织关系介绍信
2014/01/08 职场文书
高中家长寄语
2014/04/02 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
趣味运动会简讯
2015/07/20 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL