UNPKG

@nutui/nutui-react

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

44 lines (43 loc) 1.51 kB
import { useEffect } from "react"; import { isFunction } from "../utils"; var getTargetElement = function(target) { var targetElement; if (isFunction(target)) { targetElement = target(); } else if ('current' in target) { targetElement = target.current; } else { targetElement = target; } return targetElement; }; export default function useClickAway(onClickAway, target) { var // eslint-disable-next-line default-param-last 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(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(); } }; useEffect(function() { if (isListener) { window.addEventListener(eventName, handler, useCapture); } else { window.removeEventListener(eventName, handler, useCapture); } return function() { window.removeEventListener(eventName, handler, useCapture); }; }, [ target ]); }