美文网首页%……%
JavaScript函数节流和函数防抖

JavaScript函数节流和函数防抖

作者: madpluto | 来源:发表于2017-11-22 15:20 被阅读27次

    函数节流和函数防抖,两者都是优化高频率执行js代码的一种手段.在一定时间内,代码执行的次数不一定要非常多。达到一定频率就足够了。
    函数节流是指一定时间内js方法只跑一次。比如人的眨眼睛,就是一定时间内眨一次。函数节流应用的实际场景,多数在监听页面元素滚动事件的时候会用到。
    函数防抖是指频繁触发的情况下,只有足够的空闲时间,才执行代码一次。函数防抖的应用场景,最常见的就是用户注册时候的手机号码验证和邮箱验证,只有等用户输入完毕后,前端才需要检查格式是否正确,

    函数节流的要点是,声明一个变量记录当前代码是否在执行。如果空闲,则可以正常触发方法执行。如果代码正在执行,则取消这次方法执行,直接return。
    函数防抖的要点,也是需要一个setTimeout来辅助实现。延迟执行需要跑的代码。如果方法多次触发,则把上次记录的延迟执行代码用clearTimeout清掉,重新开始。如果计时完毕,没有方法进来访问触发,则执行代码。

    //示例代码
    <html>
    <head>
      <meta charset="utf-8">
      <title>函数防抖</title>
      <style>
        .demo{width: 200px;height:200px;border: 1px solid red;overflow-y:scroll;margin-top:50px}
        .scroll{height: 1000px;}
      </style>
    </head>
    <body>
     <div class="wrap">
       <div id="putong" class="demo">
         普通滚动 
         <div class="scroll"></div>
       </div>
       <div id="jieliu" class="demo">
         函数节流 
         <div class="scroll"></div>
       </div>
       <div id="fangdou" class="demo">
         函数防抖
         <div class="scroll"></div>
       </div>
     </div>
      <script>
        document.getElementById('putong').onscroll = function() {
          console.log('普通滚动')
        }
        var canRun = true;
        document.getElementById("jieliu").onscroll = function(){
          if(!canRun){
        // 判断是否已空闲,如果在执行中,则直接return
          return;
          }
    
          canRun = false;
          setTimeout(function(){
            console.log("函数节流");
            canRun = true;
          }, 300);
        };
        
        var timer = false;
        document.getElementById("fangdou").onscroll = function(){
          clearTimeout(timer);
          timer = setTimeout(function(){
            console.log("函数防抖");
          }, 300);
        }
        
      </script>
    </body>
    </html>
    

    相关文章

      网友评论

        本文标题:JavaScript函数节流和函数防抖

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