首页 > Web开发 > 详细

JS防抖节流

时间:2021-03-31 14:07:20      阅读:21      评论:0      收藏:0      [点我收藏+]

防抖(debounce) 

定义:  对于短时间内连续触发的事件(上面的滚动事件),防抖的含义就是让某个时间期限(如上面的1000毫秒)内,事件处理函数只执行一次。

实际运用:按钮频繁点击,页面resize。

立即执行版:

function debounce(fn,wait){
  let timeid,flag = true;
  return function(){
    clearTimeout(timeid);
    if(flag){
       fn();
       flag = false;
    }else{
       timeid = setTimeout(function(){
           flag = true;
       },wait);  
    }
 }
}    

非立即执行版:

function debounce(fn,wait){
  let timeid;
  return function(){
    if(timeid){
       clearTimeout(timeid)
    }
    timeid = setTimeout(fn,wait)
  }  
}

 

节流(throttle)

定义:让事件在一定时间内只执行一次

实际运用:搜索框input事件,例如要支持输入实时搜索可以使用节流方案。

时间戳版:

function throttle(fn,wait){
  let startTime = 0;
  return function(){
    let endTime = Date.now();
    if(endTime-startTime>wait){
      fn();
      startTime = endTime;
    }
  }
}

定时器版:

function throttle(fn,wait){
  let timeid = null;
  return function(){
    if(!timeid){
       timeid = setTimeout(function(){
         fn();
         timeid = null;
       },wait)
    }
  }
}

 

JS防抖节流

原文:https://www.cnblogs.com/suntongjian/p/14600692.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!