在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 相关文章推荐
ajax java 实现自动完成功能
Dec 19 Javascript
用JS做的简单的可折叠的两级树形菜单
Sep 21 Javascript
jQuery判断checkbox是否选中的小例子
Dec 02 Javascript
javascript实现密码强度显示
Mar 18 Javascript
Jquery实现遮罩层的方法
Jun 08 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
Sep 04 Javascript
原生JS实现美图瀑布流布局赏析
Sep 07 Javascript
js实现根据身份证号自动生成出生日期
Dec 15 Javascript
angular route中使用resolve在uglify压缩后问题解决
Sep 21 Javascript
极简主义法编写JavaScript类
Nov 02 Javascript
详解使用jest对vue项目进行单元测试
Sep 07 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
Jan 24 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 日常开发小技巧
2009/09/23 PHP
php下mysql数据库操作类(改自discuz)
2010/07/03 PHP
Thinkphp中import的几个用法详细介绍
2014/07/02 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
php curl发送请求实例方法
2019/08/01 PHP
JSON JQUERY模板实现说明
2010/07/03 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
Javascript中的call()方法介绍
2015/03/15 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
2020/07/28 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
Python的多态性实例分析
2015/07/07 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
解读python如何实现决策树算法
2018/10/11 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
Python装饰器用法与知识点小结
2020/03/09 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
CSS3属性box-sizing使用指南
2014/12/09 HTML / CSS
css3旋转木马_动力节点Java学院整理
2017/07/12 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
印刷工程专业应届生求职信
2013/09/29 职场文书
会议室标语
2014/06/21 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
2015年护理工作总结范文
2015/04/03 职场文书
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL