vue-context-menu
Version:
vue context-menu component
40 lines (34 loc) • 1.09 kB
JavaScript
/**
* When listening for an outside click, we set useCapture = true.
* This way, we can prevent other click listeners from firing when performing the 'click-out'.
* If useCapture is set to false, the handlers fire backwards
*/
module.exports = function createBodyClickListener(fn) {
let isListening = false
/* === public api ========================================== */
return {
get isListening() {
return isListening
},
start(cb) {
window.addEventListener('click', _onclick, true)
window.addEventListener('keyup', _onescape, true)
isListening = true
if (typeof cb === 'function') cb()
},
stop(cb) {
window.removeEventListener('click', _onclick, true)
window.removeEventListener('keyup', _onescape, true)
isListening = false
if (typeof cb === 'function') cb()
}
}
/* === private helpers ===================================== */
function _onclick (e) {
e.preventDefault()
if (typeof fn === 'function') fn(e)
}
function _onescape (e) {
if (e.keyCode === 27) _onclick(e)
}
}