防抖节流

// 防抖
// 也就是说当一个用户一直触发这个函数,且每次触发函数的间隔小于既定时间
// 那么防抖的情况下只会执行一次。
function debounce(fn, wait) {
    var timeout = null;
    return function() {
        if (timeout !== null) clearTimeout(timeout);
        timeout = setTimeout(function() {
            fn.apply()
        }, wait);
    }
}
// 处理函数
function handle() {
    console.log(Math.random());
}
// 滚动事件
window.addEventListener('scroll', debounce(handle, 1000));

// 节流
// 假设一个用户一直触发这个函数,且每次触发小于既定值,
// 函数节流会每隔这个时间调用一次
function throttle(fn,delay) {
    // 方法1 定时器
    var timeout = null;
    return function() {
       if (!timeout) {
            timeout = setTimeout(function() {
              fn();
              timeout = null;
          }, delay);
      }
  }
    // 方法2 时间戳
    var prev = Date.now();
    return function() {
        var now = Date.now();
        if (now - prev >= delay) {
            fn.apply();
            prev = Date.now();
        }
    }
}
// 处理函数
function handle() {
    console.log(Math.random());
}
// 滚动事件
window.addEventListener('scroll', throttle(handle, 1000));
// 用一句话总结防抖和节流的区别:
// 防抖是将多次执行变为最后一次执行,节流是将多次执行变为每隔一段时间执行

// 使用场景:
// 节流:滚动加载更多、搜索框搜的索联想功能、高频点击、表单重复提交……
// 防抖:搜索框搜索输入,并在输入完以后自动搜索、手机号,邮箱验证输入检测、窗口大小 resize 变化后,再重新渲染。

 

posted on 2022-05-28 22:55  风从哪个方向来、  阅读(26)  评论(0)    收藏  举报