JS防抖节流

防抖

在短时间内快速的触发一件事,每次都用新的事件替代上一次,也就是说那么我们只会执行最后一次触发的事件。短时间内快速触达一件事,只会执行最后一次

function debounce(func, delay) {
  let timeoutId;

  return function(...args) {
    if (timeoutId) {
      clearTimeout(timeoutId);
    }
    timeoutId = setTimeout(() => {
      func.apply(this, args);
    }, delay);
  };
}

// 使用防抖函数
const searchInput = document.getElementById('search');
searchInput.addEventListener('input', debounce(handleSearch, 500));

function handleSearch(event) {
  const query = event.target.value;
  // 发送搜索请求...
}

节流

在短时间内快速触发一件事,当一件事处理函数开始执行的时候,在此期间,不允许重复

function throttle(func, delay) {
  let lastExecution = 0;

  return function(...args) {
    const now = Date.now();
    if (now - lastExecution > delay) {
      func.apply(this, args);
      lastExecution = now;
    }
  };
}

// 使用节流函数
window.addEventListener('scroll', throttle(handleScroll, 100));

function handleScroll() {
  // 更新页面元素的位置或执行其他操作...
}

总结来说,防抖主要用来处理那些连续高频触发、但只需要最后一次触发结果的场景,如窗口大小改变、输入框内容变化等。而节流更适合于需要一定频率执行函数,但不想让其过于频繁执行的场景,如滚动事件、动画帧更新等。两者都是为了优化性能和提升用户体验。