在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 简单图片导航插件jquery.imgNav.js
Mar 17 Javascript
js 针对html DOM元素操作等经验累积
Mar 11 Javascript
jQuery分别获取选中的复选框值的示例
Jun 17 Javascript
JavaScript实现将UPC转换成ISBN的方法
May 26 Javascript
浅谈javascript的Array.prototype.slice.call
Aug 31 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
May 19 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
Oct 10 Javascript
JS简单添加元素新节点的方法示例
Feb 10 Javascript
layui type2 通过url给iframe子页面传值的例子
Sep 06 Javascript
解决vuex刷新数据消失问题
Nov 12 Javascript
html中创建并调用vue组件的几种方法汇总
Nov 17 Javascript
详解Vue3使用axios的配置教程
Apr 29 Vue.js
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控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
React创建组件的三种方式及其区别
2017/01/12 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
python实现xlsx文件分析详解
2018/01/02 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
python中正则表达式的使用方法
2018/02/25 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
2018/04/26 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
python接入支付宝的实例操作
2020/07/20 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
Vrbo西班牙:预订您的度假公寓(公寓、乡村房屋…)
2020/04/27 全球购物
电气专业应届生求职信
2013/11/01 职场文书
母亲节演讲稿
2014/05/27 职场文书
学校周年庆活动方案
2014/08/22 职场文书
个人委托书如何写
2014/09/25 职场文书
自荐信格式模板
2015/03/27 职场文书
技术员岗位职责范本
2015/04/11 职场文书
公司管理制度范本
2015/08/03 职场文书
2016三八妇女节校园广播稿
2015/12/17 职场文书
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL