Skip to content

Commit

Permalink
fix: clickoutside bad when use append-to-body (#291)
Browse files Browse the repository at this point in the history
  • Loading branch information
mengxiong10 committed Apr 9, 2019
1 parent 20d1f19 commit 9bb6046
Showing 1 changed file with 18 additions and 4 deletions.
22 changes: 18 additions & 4 deletions src/directives/clickoutside.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,33 @@
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 (
!el.contains(e.target) &&
!(vnode.context.popupElm && vnode.context.popupElm.contains(e.target)) &&
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('click', el['@clickoutside'], false)
document.addEventListener('mousedown', handleMouseDown)
document.addEventListener('mouseup', el['@clickoutside'])
},
unbind (el) {
document.removeEventListener('click', el['@clickoutside'], false)
document.removeEventListener('mousedown', handleMouseDown)
document.removeEventListener('mouseup', el['@clickoutside'])
}
}

0 comments on commit 9bb6046

Please sign in to comment.