美文网首页我爱编程
js中防抖(debounce)和节流(throttle)

js中防抖(debounce)和节流(throttle)

作者: 静简明 | 来源:发表于2018-05-28 11:24 被阅读0次
    1. debounce

    防抖:在一定时间段内只有一次有效执行
    保证100ms内只有一次有效执行

    var controlClass = {
      timer: null,
      mainOperation: function(){
        // 真正要执行的操作
      },
      control: function () {
        clearTimeout(this.timer);
        timer = this.setTimeout(this.mainOperation, 100);
      }
    }
    // 调用
    controlClass.control();
    

    对于window的resize实现防抖

    function resizeHandler() {
      console.log("window resize");
    }
    function debounce(method, delay) {
      var timer = null;
      return function () {
        var context = this;
        var args = arguments;
        clearTimeout(timer);
        timer = this.setTimeout(method.call(context,args), delay)
      };
    };
    //调用
    window.onresize = throttle(resizeHandler, 500);
    
    2. throttle

    节流:在没有发生操作的一段时间后,才进行一次有效执行

    function throttle(method, intervalTime) {
      var startTime,
            timer;
      return function () {
        if (!startTime) {
          startTime = new Date();
        }
        let currentTime = new Date();
        clearTimeout(timer);
        if (currentTime - startTime >= intervalTime) {
          method.call(this, arguments);
         startTime = currentTime; 
        } else {
          timer = setTimeout(throttle(method, intervalTime), 50);
        }
      }
    }
    
    3. lodash中防抖和节流源码分析

    这里的代码经常看看哟!
    此部分信息参考:https://www.cnblogs.com/wandiao/p/7223269.html

    4. 相关requestAnimationFrame未完待续啊。。。这好像是个坑?

    参考:张鑫旭老师的文章
    本文目的仅仅是为了个人查找阅读等提供方便

    相关文章

      网友评论

        本文标题:js中防抖(debounce)和节流(throttle)

        本文链接:https://www.haomeiwen.com/subject/ibqijftx.html