vue和jq中实现点击任意地方关闭弹窗
有时候 开发中会遇到这样一个需求 点击任意地方关闭弹窗1.先用jq实现效果// 点击任意地方关闭遮罩层 除了指定区域$('#最大的父容器区域').bind('click', function(e) {var e = e || window.event; //浏览器兼容性...
·
有时候 开发中会遇到这样一个需求 点击任意地方关闭弹窗
1.先用jq实现效果
// 点击任意地方关闭遮罩层 除了指定区域
$('#最大的父容器区域').bind('click', function (e) {
var e = e || window.event; //浏览器兼容性
var elem = e.target || e.srcElement;
while (elem) { //循环判断至跟节点,防止点击的是div子元素
if (elem.id && elem.id == '这里填id就是内容部分') {
return;
}
elem = elem.parentNode;
}
$('#除了内容部分 最大的父容器中任意地方都可以关闭内容部分').hide(); //点击的不是div或其子元素
});
2.vue实现
1> 存放一个公共js
// bind.js
export default {
bind: function (el, binding, vNode) {
el.__vueClickOutside__ = event => {
if (!el.contains(event.target)) {
// call method provided in v-click-outside value
vNode.context[binding.expression](event)
event.stopPropagation()
}
}
document.body.addEventListener('click', el.__vueClickOutside__)
},
unbind: function (el, binding, vNode) {
// Remove Event Listeners
document.removeEventListener('click', el.__vueClickOutside__)
el.__vueClickOutside__ = null
}
}
2> 在页面引入
// index.vue
<template>
<!-- 除了当前标签包裹的内容 其他区域都会触发这个事件 -->
<div v-click-outside="onClickOutside">
</div>
</template>
<script>
import clickOutside from './bind.js';
export default {
data() {
},
directives: {
clickOutside // 注册自定义事件
},
methods: {
onClickOutside() {
}
}
}
</script>
更多推荐
已为社区贡献12条内容
所有评论(0)