chushihua
This commit is contained in:
+79
@@ -0,0 +1,79 @@
|
||||
'use strict';
|
||||
|
||||
exports.__esModule = true;
|
||||
|
||||
var _vue = require('vue');
|
||||
|
||||
var _vue2 = _interopRequireDefault(_vue);
|
||||
|
||||
var _dom = require('element-ui/lib/utils/dom');
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var nodeList = [];
|
||||
var ctx = '@@clickoutsideContext';
|
||||
|
||||
var startClick = void 0;
|
||||
var seed = 0;
|
||||
|
||||
!_vue2.default.prototype.$isServer && (0, _dom.on)(document, 'mousedown', function (e) {
|
||||
return startClick = e;
|
||||
});
|
||||
|
||||
!_vue2.default.prototype.$isServer && (0, _dom.on)(document, 'mouseup', function (e) {
|
||||
nodeList.forEach(function (node) {
|
||||
return node[ctx].documentHandler(e, startClick);
|
||||
});
|
||||
});
|
||||
|
||||
function createDocumentHandler(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))) return;
|
||||
|
||||
if (binding.expression && el[ctx].methodName && vnode.context[el[ctx].methodName]) {
|
||||
vnode.context[el[ctx].methodName]();
|
||||
} else {
|
||||
el[ctx].bindingFn && el[ctx].bindingFn();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* v-clickoutside
|
||||
* @desc 点击元素外面才会触发的事件
|
||||
* @example
|
||||
* ```vue
|
||||
* <div v-element-clickoutside="handleClose">
|
||||
* ```
|
||||
*/
|
||||
exports.default = {
|
||||
bind: function bind(el, binding, vnode) {
|
||||
nodeList.push(el);
|
||||
var id = seed++;
|
||||
el[ctx] = {
|
||||
id: id,
|
||||
documentHandler: createDocumentHandler(el, binding, vnode),
|
||||
methodName: binding.expression,
|
||||
bindingFn: binding.value
|
||||
};
|
||||
},
|
||||
update: function update(el, binding, vnode) {
|
||||
el[ctx].documentHandler = createDocumentHandler(el, binding, vnode);
|
||||
el[ctx].methodName = binding.expression;
|
||||
el[ctx].bindingFn = binding.value;
|
||||
},
|
||||
unbind: function unbind(el) {
|
||||
var len = nodeList.length;
|
||||
|
||||
for (var i = 0; i < len; i++) {
|
||||
if (nodeList[i][ctx].id === el[ctx].id) {
|
||||
nodeList.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
delete el[ctx];
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user