UNPKG

tzcloud-element-pro

Version:

A super practical component library that developed by vue2.x and element-ui

61 lines (55 loc) 1.93 kB
"use strict"; 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;