节流和防抖简单介绍

背景

因为在开发过程中经常会用到节流和防抖,比如input的输入,滚动条监听等等,而且对节流和防抖的概念很模糊,所以在这里简单的写了一下这两个函数便于理解

防抖

就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。防抖在input输入时最常用

/** 防抖函数 */
const debounce = (fn: (...args), timeout) => {
  let timer
  return (...args) => {
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {fn(...args)}, timeout);
  }
}

节流

就是指连续触发事件但是在 n 秒中只执行一次函数。简单说就是会使函数执行的频率不那么频繁

防抖函数的方法有两种

方法一:时间戳

const throttle=(func, wait)=> {
    let previous = 0;
    return ()=> {
        let now = Date.now();if (now - previous > wait) {
            func();
      previous
= now;
} } }

方法二:定时器

const throttle=(func, wait)=> {
    let timeout;
    return ()=> {
        if (!timeout) {
            timeout = setTimeout(() => {
                timeout = null;
                func()
            }, wait)
        }

    }
}

 

posted @ 2021-08-25 11:32  zien  阅读(69)  评论(0编辑  收藏  举报