npm install vue-click-outside
方法一:
<span v-clickoutside="handleClose">内容</span>
<span @click.stop="isShow">点击出现的内容</span>
<script>
const clickoutside = {
bind(el, binding, vnode) {
function documentHandler(e) {
if (el.contains(e.target)) {
return false;
}
if (binding.expression) {
binding.value(e);
}
}
el.__vueClickOutside__ = documentHandler;
document.addEventListener("click", documentHandler);
},
update() {},
unbind(el, binding) {
document.removeEventListener("click", el.__vueClickOutside__);
delete el.__vueClickOutside__;
},
};
export default {
directives: { clickoutside },
methods: {
isShow() {
this.show = !this.show;
},
handleClose(){
this.show = false;
}
}
}
</script>
方法二:
<span v-click-outside="handleClose">其余内容</span>
<span @click.stop="isShow">点击出现的内容</span>
import { clickOutside } from 'common/js/event';
export default {
directives: {clickOutside},
methods: {
isShow() {
this.show = !this.show;
},
handleClose() {
this.show = false;
}
}
}
event.js
export const clickOutside = {
bind: function(el, binding, vNode) {
el.__vueClickOutside__ = event => {
if (!el.contains(event.target)) {
vNode.context[binding.expression](event);
event.stopPropagation();
}
};
document.body.addEventListener('click', el.__vueClickOutside__);
},
unbind: function(el, binding, vNode) {
document.removeEventListener('click', el.__vueClickOutside__);
el.__vueClickOutside__ = null;
},
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)