@nutui/nutui-react
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
53 lines (52 loc) • 1.7 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return useClickAway;
}
});
var _react = require("react");
var _utils = require("../utils");
var getTargetElement = function getTargetElement(target) {
var targetElement;
if ((0, _utils.isFunction)(target)) {
targetElement = target();
} else if ('current' in target) {
targetElement = target.current;
} else {
targetElement = target;
}
return targetElement;
};
function useClickAway(onClickAway, target) {
var eventName = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 'click', useCapture = arguments.length > 3 ? arguments[3] : void 0, isListener = arguments.length > 4 ? arguments[4] : void 0, outerVar = arguments.length > 5 ? arguments[5] : void 0;
var handler = function handler(event) {
var targets = Array.isArray(target) ? target : [
target
];
if (targets.some(function(item) {
var targetElement = getTargetElement(item);
return !targetElement || targetElement.contains(event.target);
})) {
return;
}
if (outerVar) {
onClickAway();
}
};
(0, _react.useEffect)(function() {
if (isListener) {
window.addEventListener(eventName, handler, useCapture);
} else {
window.removeEventListener(eventName, handler, useCapture);
}
return function() {
window.removeEventListener(eventName, handler, useCapture);
};
}, [
target
]);
}
;