tzcloud-element-pro
Version:
A super practical component library that developed by vue2.x and element-ui
61 lines (55 loc) • 1.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var nodeList = [];
var ctx = '@@clickoutsideContext';
var mdEvent,
seed = 0;
document.addEventListener('mousedown', function (e) {
return mdEvent = e;
});
document.addEventListener('mouseup', function (e) {
nodeList.forEach(function (node) {
return node[ctx].clickHandler(e, mdEvent);
});
});
function insideMe(el, mouseup) {
var rect = el.getBoundingClientRect();
if (mouseup.pageX < rect.left || mouseup.pageX > rect.right || mouseup.pageY < rect.top || mouseup.pageY > rect.bottom) return false;else return true;
}
function wrapFn(el, binding, vnode) {
return function () {
var mouseup = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var mousedown = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (!vnode || !vnode.context || !mouseup.target || !mousedown.target || el.contains(mouseup.target) || el.contains(mousedown.target) || el === mouseup.target || vnode.context.popperElm && (vnode.context.popperElm.contains(mouseup.target) || vnode.context.popperElm.contains(mousedown.target)) || insideMe(el, mouseup)) return;
var methodName = binding.expression;
if (methodName && vnode.context[methodName]) {
vnode.context[methodName]();
}
};
}
var _default = {
bind: function bind(el, binding, vnode) {
el[ctx] = {
id: seed++,
clickHandler: wrapFn(el, binding, vnode)
};
nodeList.push(el);
},
update: function update(el, binding, vnode) {
el[ctx].clickHandler = wrapFn(el, binding, vnode);
},
unbind: function unbind(el) {
for (var i = 0, len = nodeList.length; i < len; i++) {
var node = nodeList[i];
if (node[ctx].id === el[ctx].id) {
nodeList.splice(i, 1);
delete el[ctx];
break;
}
}
}
};
exports.default = _default;