UNPKG

@darwish/hooks-core

Version:

46 lines (45 loc) 1.62 kB
import { cloneElement, useEffect } from 'react'; import useSetState from './useSetState'; var usePress = function (pressedView, callback, pressTime) { if (pressTime === void 0) { pressTime = 300; } var element = typeof pressedView === 'function' ? pressedView() : pressedView; var _a = useSetState({ startTime: -1, spendTime: -1, }), times = _a[0], setTimes = _a[1]; var onMouseDown = function () { if (element.props && 'onMouseDown' in element.props) { element.props.onMouseEnter(); } setTimes({ startTime: new Date().getTime(), spendTime: 0 }); }; var onMouseUp = function () { if (element.props && 'onMouseUp' in element.props) { element.props.onMouseLeave(); } setTimes({ spendTime: new Date().getTime() - times.startTime, }); }; useEffect(function () { if (times.spendTime >= pressTime) { /** * 有可能两次相同的花费时间,所以需要判断是否已经执行过 * 如果已经执行过,startTime 会被重置为 -1 * 如果没有执行过,startTime 一定是 0 * 因为在onMouseDown中,spendTime 会被赋值为 0 */ if (times.startTime === 0) { callback(); setTimes({ spendTime: -1 }); } } }, [times.spendTime]); return function () { return cloneElement(element, { onMouseDown: onMouseDown, onMouseUp: onMouseUp, }); }; }; export default usePress;