防抖&节流函数的实现

防抖和节流函数算是非常基础的工具函数了,说一下个人的简单理解:

  • 防抖:用户操作会在一定等待一段时间后执行function,如果用户在等待时间范围内重复操作,则重新计算等待时间(相当于有施法前摇时间,如果你重复释放技能,则技能前摇重新计算。)

  • 节流:用户频繁操作下,function必须经过一定的时间间隔后才会执行,如每10秒才可以执行一次。相当于有冷却时间的function

具体实现:

防抖:
function debounce(fn, wait) {
  var timer = null;
  return function() {
    // 如果此时存在定时器的话,则取消之前的定时器重新记时
    if (timer) {
      clearTimeout(timer);
      timer = null;
    }
    // 设置定时器,使事件间隔指定事件后执行
    timer = setTimeout(() => {
      fn.apply(this, arguments);
    }, wait);
  };
}
节流
function throttle(fn, delay) {
  var preTime = Date.now();

  return function() {
      var nowTime = Date.now();
    // 两次时间间隔超过了指定时间的话,则执行函数。
    if (nowTime - preTime >= delay) {
      preTime = Date.now();
      return fn.apply(this, arguments);
    }
  };
}

你可能感兴趣的:(基础内容)