react单击模拟双击事件自定义hook

// 第一个参数为单击事件函数 第二个参数为双击事件函数  
const useClick = (callback, doubleCallback) => {
    const clickRef = useRef({
      clickCount: 0,
      time: 0,
      timer: null,
    });
    return (...args) => {
      clickRef.current.clickCount += 1;
      clickRef.current.time = Date.now();
      clickRef.current.timer = setTimeout(() => {
        if (
          Date.now() - clickRef.current.time <= 200 &&
          clickRef.current.clickCount === 2
        ) {
          doubleCallback && doubleCallback.apply(null, args);
        }
        if (clickRef.current.clickCount === 1) {
          callback && callback.apply(null, args);
        }
        clearTimeout(clickRef.current.timer);
        clickRef.current.clickCount = 0;
      }, 200);
    };
  };

使用方法:

  const onLabelClick = useClick(
    () => {
      console.log('单击事件触发了');
    },
    () => {
      console.log('双击事件触发了');
    }
  );

<label onClick={() => onLabelClick(item)} htmlFor={item.id}>
          {item.name}
        </label>

这里用单击事件模拟双击了,既能处理同一个元素的单击事件又能处理双击事件,互不影响

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值