标签搜索

节流函数和函数去抖

cicaba
2018-09-11 / 0 评论 / 2 阅读 / 正在检测是否收录...
  //节流函数(预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下一个新周期。)
  //该方法主要利用两次函数执行的时间差判断
  function throttle(action, delay) {
    var last = 0; //上次执行的时间
    return function() {
      var curr = +new Date(); ///获取当前时间
      if (curr - last > delay) { //如果两次函数执行的时间间隔大于指定的值,即可执行
        action.apply(this, arguments) //执行时把对应的参数传递下去
        last = curr //保存上次执行的时间
      };
    };
  }

  //去抖函数(当调用动作n毫秒后,才会执行该动作,若在这n毫秒内又调用此动作则将重新计算执行时间,如此往复,直到不再调用该动作,函数才会执行。)
  //该方法利用的是延迟调用,在指定时间内如果再次执行,那么上次的定时器将被清理,直到指定时间内不再调用,函数才会被执行!
  function debounce(action, idle) {
    var last = null;
    return function() {
      var ctx = this;
      var args = arguments;
      clearTimeout(last);
      last = setTimeout(function() {
        action.apply(ctx, args)
      }, idle);
    }
  }

通常时间设为16.7sm,由于主流的屏幕刷新率都在60hz,因此渲染一帧的事件就必须控制在16.7ms内才能保证不掉帧。也就是说每一次渲染都要在 16.7ms

0

评论 (0)

取消