当前位置:首页 > JavaScript

js 实现防抖

2026-01-30 23:40:46JavaScript

防抖的概念

防抖(Debounce)是一种优化高频触发事件的技术,确保事件在停止触发后的指定时间内只执行一次。常用于输入框搜索、窗口大小调整等场景。

基础实现

使用定时器延迟执行函数,若在延迟期间再次触发,则清除之前的定时器重新计时:

function debounce(func, delay) {
  let timer;
  return function(...args) {
    clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(this, args);
    }, delay);
  };
}

立即执行版本

支持首次触发立即执行,后续触发需等待延迟结束后才能再次执行:

function debounce(func, delay, immediate) {
  let timer;
  return function(...args) {
    if (immediate && !timer) {
      func.apply(this, args);
    }
    clearTimeout(timer);
    timer = setTimeout(() => {
      timer = null;
      if (!immediate) {
        func.apply(this, args);
      }
    }, delay);
  };
}

取消功能扩展

增加取消延迟执行的方法:

js 实现防抖

function debounce(func, delay) {
  let timer;
  function debounced(...args) {
    clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(this, args);
    }, delay);
  }
  debounced.cancel = () => clearTimeout(timer);
  return debounced;
}

使用示例

const searchInput = document.getElementById('search');
const debouncedSearch = debounce(function(e) {
  console.log('Search value:', e.target.value);
}, 500);

searchInput.addEventListener('input', debouncedSearch);

// 需要取消时
// debouncedSearch.cancel();

注意事项

  • 确保func函数的上下文(this)正确绑定
  • 频繁操作时内存中的定时器会被及时清理
  • 延迟时间需根据实际场景调整(通常200-500ms)

标签: 防抖js
分享给朋友:

相关文章

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…