当前位置:首页 > JavaScript

js节流防抖实现思路

2026-01-31 06:17:12JavaScript

节流(Throttle)的实现思路

节流的核心思想是在一定时间内,无论事件触发多少次,只执行一次回调函数。适用于高频事件(如滚动、鼠标移动)的场景。

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

使用时间戳实现,第一次立即执行,后续每隔delay毫秒执行一次。适用于需要立即响应的场景。

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

使用定时器实现,第一次延迟执行,停止触发后会再执行一次。适用于需要保证最终执行的场景。

js节流防抖实现思路

防抖(Debounce)的实现思路

防抖的核心思想是事件触发后等待一段时间再执行回调,若在等待期间再次触发则重新计时。适用于输入框搜索联想等场景。

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

基础版实现,延迟执行,连续触发时重置延迟时间。

js节流防抖实现思路

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

增强版支持立即执行选项,第一次触发立即执行,后续触发需等待延迟结束。

两者区别与选择

节流保证周期内至少执行一次,适合连续高频触发但需要均匀响应的场景(如页面滚动)。

防抖在连续触发时不执行,直到停止后才执行,适合需要最终结果的场景(如搜索输入完成后的查询)。

实际应用示例

// 节流应用:滚动加载更多
window.addEventListener('scroll', throttle(loadMore, 500));

// 防抖应用:搜索框联想
input.addEventListener('input', debounce(fetchSuggestions, 300));

注意事项

高频场景中,使用requestAnimationFrame替代setTimeout可获得更流畅的性能表现。在React/Vue等框架中可直接使用useThrottle/useDebounce等Hook实现。

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

相关文章

vue实现抽奖转盘实现思路

vue实现抽奖转盘实现思路

实现抽奖转盘的基本思路 使用Vue实现抽奖转盘的核心在于动态旋转动画和结果判定。需要结合CSS动画、随机数生成和Vue的数据响应特性。 准备工作 安装Vue及相关依赖(如需要动画库):…

vue防抖怎么实现

vue防抖怎么实现

防抖的实现原理 防抖(Debounce)是一种限制函数频繁调用的技术,确保函数在最后一次调用后的指定时间间隔内只执行一次。适用于输入框搜索、窗口调整等场景。 Vue 中实现防抖的两种方式 方法一:使…

vue轮播抽奖实现思路

vue轮播抽奖实现思路

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

php限时抢购实现思路

php限时抢购实现思路

限时抢购功能实现思路 限时抢购是电商系统中常见的促销方式,通过PHP实现需要考虑并发控制、库存管理、时间限制等关键点。 数据库设计 创建商品表时需包含抢购专用字段: CREATE TABLE `f…

JS节流和防抖的实现

JS节流和防抖的实现

节流(Throttle)的实现 节流是指在一定时间间隔内,函数最多执行一次。常用于限制高频事件的触发频率,如滚动事件、窗口调整等。 function throttle(func, delay) {…

Vue实现思路

Vue实现思路

Vue 实现思路 Vue 是一个渐进式 JavaScript 框架,适用于构建用户界面。以下是 Vue 实现的一些核心思路和方法。 组件化开发 Vue 的核心思想之一是组件化开发。将界面拆分为多个独…