2
0
mirror of https://github.com/tenrok/vue2-datepicker.git synced 2026-06-19 10:10:35 +03:00
Files
vue2-datepicker/src/directives/clickoutside.js
T
2019-04-09 20:39:04 +08:00

34 lines
954 B
JavaScript

let mouseDownTarget
const handleMouseDown = evt => (mouseDownTarget = evt.target)
export default {
bind (el, binding, vnode) {
el['@clickoutside'] = e => {
const mouseUpTarget = e.target
const popupElm = vnode && vnode.context && vnode.context.popupElm
if (
mouseDownTarget &&
mouseUpTarget &&
!el.contains(mouseUpTarget) &&
!el.contains(mouseDownTarget) &&
!(
popupElm &&
(popupElm.contains(mouseDownTarget) ||
popupElm.contains(mouseUpTarget))
) &&
binding.expression &&
vnode.context[binding.expression]
) {
binding.value()
}
}
document.addEventListener('mousedown', handleMouseDown)
document.addEventListener('mouseup', el['@clickoutside'])
},
unbind (el) {
document.removeEventListener('mousedown', handleMouseDown)
document.removeEventListener('mouseup', el['@clickoutside'])
}
}