事件节流方法

事件节流,简而言之就是防止事件被频繁触发;

不多说,上代码;

import DOM from '../methods/DOM';// 这是我之前单独写的一个绑定移除dom事件的方法;

class EventThrottle {
  constructor() {
    this.arr = []; // 保存所有绑定了事件节流的对象
  }

  // FN方法 duration时间,触发的最大频率  eventType动作(click或其他)  eventTarget对象
  add({ FN, duration, eventType, eventTarget }) {
    let timer = null;
    const symbol = Symbol(Date.now());
    const hFN = (e) => {
      if (!timer) {
        FN(e);
        timer = setTimeout(() => {
          clearTimeout(timer);
          timer = null;
        }, duration);
      }
    };
    const target = eventTarget || document;

    const removeFN = DOM.ListenerFN({
      target,
      FN: hFN,
      event: eventType,
    });

    this.arr.push({
      removeFN,
      symbol,
    });
    return symbol;
  }

  remove({ symbol }) {
    this.arr.filter((item) => {
      if (item.symbol !== symbol) {
        return true;
      }
      item.removeFN();
      return false;
    });
  }
}

const eventThrottle = new EventThrottle(); // 实例化

export default eventThrottle; // 返回实例化对象

在外部的话,引用后,通过add方法添加,remove方法来移除;

eventThrottle.add({ FN, duration, eventType, eventTarget }); // 会返回一个symbol
eventThrottle.remove({symbol});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值