当前位置:首页 > 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 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…