vue:鼠标点击画布外的区域时弹窗提示

vue:鼠标点击画布外的区域时弹窗提示

鼠标点击画布外的区域时,弹出弹窗提示“未保存,是否离开”。
实现这个过程的逻辑是怎样的?


回答:

监听body的点击事件,判断触发点击事件的节点是否在画布内


回答:

npm搜个clickoutside的插件基本都能用。基本思路就是顶层的click事件,画布元素作为排除条件,也就是点击元素不是目标元素或不在目标元素内。用指令的好处就是可以更好的记录,否则还需要在每次点击事件去扫描。大概思路就是这样,或者看一下别人的源码。


回答:

div为画布

<div v-clickoutside="handle"></div>

methods: {

handle() {

//处理外部的点击事件,例如 弹窗提示

},

}

Vue.directive('clickoutside',{

bind(el, binding, vnode) {

function documentHandler(e) {

// el 包含其触发的元素 那当然不能触发啦

if (el.contains(e.target)) {

return false;

}

// 满足上面条件, 并且expression 的值不为空 触发(希望value是个函数)

if (binding.expression) {

// 调用自定义指令传来的函数,e是事件原对象 作为参数(为什么传e 因为有些情况需要把这个对象抛出方便用户的操作)

binding.value(e);

}

}

el.__vueClickOutside__ = documentHandler;

// 在document上监听事件

document.addEventListener('click', documentHandler);

},

update() {

},

unbind(el, binding) {

// 取消事件监听(el.__vueClickOutside 派上用场了吧)

document.removeEventListener('click', el.__vueClickOutside__);

// 既然都取消了 那么这个属性就没必要存在了

delete el.__vueClickOutside__;

}

})


回答:

Vue.directive('click-outside', {

bind(el, binding, vnode) {

el.clickOutsideEvent = event => {

if (!(el == event.target || el.contains(event.target))) {

vnode.context[binding.expression](event)

}

}

document.body.addEventListener('click', el.clickOutsideEvent)

},

unbind(el) {

document.body.removeEventListener('click', el.clickOutsideEvent)

},

})

以上是 vue:鼠标点击画布外的区域时弹窗提示 的全部内容, 来源链接: utcz.com/p/937072.html

回到顶部