当前位置:首页 > JavaScript

js节流防抖实现思路

2026-04-04 22:17:53JavaScript

节流(Throttle)的实现思路

节流的核心是限制函数在一定时间内只执行一次,常用于高频触发的事件(如滚动、窗口调整)。

时间戳版
通过比较当前时间与上次执行时间差,决定是否执行函数:

function throttle(fn, delay) {
  let last = 0;
  return function(...args) {
    const now = Date.now();
    if (now - last > delay) {
      fn.apply(this, args);
      last = now;
    }
  };
}

定时器版
利用定时器延迟执行,确保间隔时间内仅有一个定时器存在:

js节流防抖实现思路

function throttle(fn, delay) {
  let timer = null;
  return function(...args) {
    if (!timer) {
      timer = setTimeout(() => {
        fn.apply(this, args);
        timer = null;
      }, delay);
    }
  };
}

防抖(Debounce)的实现思路

防抖的核心是在事件触发后等待一定时间再执行,若期间重复触发则重新计时。

基础版
通过清除并重建定时器实现延迟执行:

js节流防抖实现思路

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

立即执行版
首次触发立即执行,后续触发需等待延迟:

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

结合场景的选择

  • 节流适用场景
    需要均匀执行的情况,如滚动加载、鼠标移动跟踪。

  • 防抖适用场景
    需等待操作停止后执行的场景,如搜索输入联想、窗口大小调整。

注意事项

  • 使用apply确保函数上下文(this)和参数正确传递。
  • 清除定时器避免内存泄漏。
  • 结合需求选择时间戳或定时器实现节流。

标签: 防抖思路
分享给朋友:

相关文章

vue如何实现防抖

vue如何实现防抖

Vue 防抖的实现方法 在Vue中实现防抖(debounce)可以通过以下几种方式,根据不同的使用场景选择合适的方法。 使用 Lodash 的 debounce 函数 Lodash 是一个流行的 J…

vue轮播抽奖实现思路

vue轮播抽奖实现思路

Vue轮播抽奖实现思路 轮播抽奖是一种常见的互动效果,通过快速切换选项最终停在某个奖品上。以下是基于Vue的实现思路和关键步骤: 核心逻辑设计 使用Vue的data管理当前高亮项的索引和抽奖状态…

vue实现轮播图思路

vue实现轮播图思路

实现轮播图的核心思路 在Vue中实现轮播图通常需要结合组件化、动态数据绑定和动画过渡。核心思路包括数据驱动渲染、自动轮播逻辑、用户交互控制以及无缝循环效果。 数据准备与结构设计 定义轮播图数据数组,…

React如何使用防抖

React如何使用防抖

防抖的基本概念 防抖(Debounce)是一种限制函数执行频率的技术,确保函数在连续触发时只执行一次。在React中,常用于输入框搜索、窗口大小调整等高频事件场景。 使用Lodash实现防抖 Lod…

react的实现思路

react的实现思路

React 的核心实现思路 React 的实现基于组件化、虚拟 DOM 和单向数据流等核心概念。其设计哲学强调声明式编程和高效更新,通过虚拟 DOM 的差异计算优化性能。 虚拟 DOM 与 Diff…

js 实现防抖

js 实现防抖

防抖的概念 防抖(Debounce)是一种优化高频触发事件的技术,确保事件在停止触发后的指定时间内只执行一次。常用于输入框搜索、窗口大小调整等场景。 基础实现 使用定时器延迟执行函数,若在延…