在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 相关文章推荐
jQuery中Form相关知识汇总
Jan 06 Javascript
JS获取时间的方法
Jan 21 Javascript
javascript实现画不相交的圆
Apr 07 Javascript
深入分析下javascript中的[]()+!
Jul 07 Javascript
搭建Bootstrap离线文档的方法
Dec 02 Javascript
Html5+jQuery+CSS制作相册小记录
Dec 30 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
Sep 10 Javascript
element form 校验数组每一项实例代码
Oct 10 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
Dec 29 Javascript
vue cli4.0项目引入typescript的方法
Jul 17 Javascript
使用vue引入maptalks地图及聚合效果的实现
Aug 10 Javascript
小程序实现密码输入框
Nov 16 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实现提取一个图像文件并在浏览器上显示的代码
2012/10/06 PHP
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
2016/10/28 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
PHP获取星期几的常用方法小结
2018/12/18 PHP
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
AngularJs bootstrap详解及示例代码
2016/09/01 Javascript
详解angularjs中如何实现控制器和指令之间交互
2017/05/31 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
2020/11/12 Javascript
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
python中的字典使用分享
2016/07/31 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
python实现QQ邮箱/163邮箱的邮件发送
2019/01/22 Python
python 用struct模块解决黏包问题
2020/11/07 Python
美国内衣品牌:Leonisa
2016/08/14 全球购物
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
高中自我鉴定范文
2013/11/03 职场文书
欢送退休感言
2014/02/08 职场文书
施工质量承诺书范文
2014/05/30 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
入伍通知书
2015/04/23 职场文书
三年级作文之趣事作文
2019/11/04 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书
JAVA springCloud项目搭建流程
2022/05/11 Java/Android