防抖和节流

防抖和节流的区别

  • 防抖指函数防抖(debounce):在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。
// 防抖
function debounce(fn, time) {    
    let timeout = null;    
    return function() {        
        if(timeout !== null)   clearTimeout(timeout);        
        timeout = setTimeout(fn, time);    
    }
}
// 处理函数
function handle() {    
    console.log(`啦啦啦....`); 
}
// 滚动事件
window.addEventListener('scroll', debounce(handle, 1000));
  • 节流指函数节流(throttle):规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。
// 节流throttle代码(定时器):
function throttle(fn, time) {            
    let canRun = true;            
    return function() {                
        if(!canRun) return;
        canRun = false;             
        setTimeout(() =>{
           fn.apply(this, arguments);
           canRun = true; 
        },time)          
    }        
}        
function handle() {            
    console.log(`啦啦啦....`);        
}        
window.addEventListener('scroll', throttle(handle, 1000));

应用场景

  • 防抖
  1. 搜索联想,用户在不断输入值时,用防抖来节约请求资源
  2. window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次
  • 节流
  1. 鼠标不断点击触发,mousedown(单位时间内只触发一次)
  2. 监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、什么是防抖和节流?为什么用? |--引入防抖和节流解决的问题:当一个函数被频繁、无限制的被调用的时候,会加...
    stillpeng阅读 2,731评论 0 0
  • 防抖和节流是针对响应跟不上触发频率这类问题的两种解决方案 debounce,去抖动。策略是当事件被触发时,设定一个...
    皇甫圣坤阅读 380评论 0 0
  • 作为一名前端开发者,我们经常会处理各种事件,比如常见的click、scroll、 resize等等。仔细一想,会发...
    一米阳光kk阅读 505评论 0 0
  • 在前端开发的过程中,我们经常会需要绑定一些持续触发的事件,如 resize、scroll、mousemove 等等...
    Grace_feb3阅读 401评论 0 0
  • 最近,我们当地有单位发布了招聘新人的广告,我就抓紧时间去报名,想要去试一试。 身边的人,有的支持我,说要给自己一个...
    一享书香阅读 1,320评论 0 2