mirror of
https://github.com/tenrok/vue2-datepicker.git
synced 2026-06-19 10:10:35 +03:00
34 lines
954 B
JavaScript
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'])
|
|
}
|
|
}
|