防抖和节流

2020-06-02  本文已影响0人  darkTi

一、防抖(debounce)

//防抖处理
function debounce(fn,wait){
  var timeout = null
  return function(){
    if(timeout !== null)  clearTimeout(timeout)
    timeout = setTimeout(fn,wait)  // 关键句
  }
}
//你要执行的操作
function handle(){
  console.log('你执行了')
}
//绑定到需要防抖处理的元素上
window.addEventListener('click', debounce(handle, 3000))

点击停止后,会打印出一次“你执行了”~~(每次都会触发事件,但只有在规定时间后才会调用事件)

二、节流(throttle)

//利用时间戳
var throttle = function(func, delay) {            
  var prev = Date.now();
  return function() {  
    var that = this;                
    var args = arguments;                
    var now = Date.now();  
    if (now - prev >= delay) {
      func.call(that, args);                    
      prev = Date.now();                
    }            
  }        
}        
function handle() {            
  console.log(Math.random());        
}        
window.addEventListener('click', throttle(handle, 1000));

区别:函数防抖只会在事件最后一次触发后去调用一次函数;函数节流是,不管事件触发多么频繁,都会保证在规定时间内执行一次回调函数;

上一篇 下一篇

猜你喜欢

热点阅读