当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时。举个栗子,持续触发scroll事件时,并不执行handle函数,当1000毫秒内没有触发scroll事件时,才会延时触发scroll事件。

/*
 *  description: 在vue中使用的防抖函数
 *  param fnName {String}  函数名
 *  param param {String}  参数
 *  param time {Number}    延迟时间
 *  return: 处理后的执行函数
 */
function VueDebounce(fnName ,param, time) {
  let timeout = null;
  return function() {
    if (timeout) {
      clearTimeout(timeout);
    }
    timeout = setTimeout(() => {
      this[fnName](param);
    }, time);
  };
}

**节流 防止重复点击按钮**
function throttle(fnName,param,delay){
    let valid = true
    return function() {
       if(!valid){
           return false 
       }
       this[fnName](param);
       // 执行函数并且在间隔期内把状态位设为无效
        valid = false
        setTimeout(() => {
            valid = true;
        }, delay)
    }
}

freeman_Tian
12 声望2 粉丝