当前位置:首页 > JavaScript

js截流实现

2026-02-02 03:04:01JavaScript

防抖(Debounce)实现

防抖的核心是在事件触发后延迟执行函数,若在延迟时间内重复触发,则重新计时。适用于输入框搜索、窗口大小调整等场景。

代码示例:

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

// 使用示例
const handleSearch = debounce(() => {
  console.log('Search triggered');
}, 300);

inputElement.addEventListener('input', handleSearch);

节流(Throttle)实现

节流的核心是在固定时间内只执行一次函数,稀释触发频率。适用于滚动事件、高频点击等场景。

js截流实现

代码示例:

function throttle(func, limit) {
  let inThrottle;
  return function(...args) {
    if (!inThrottle) {
      func.apply(this, args);
      inThrottle = true;
      setTimeout(() => (inThrottle = false), limit);
    }
  };
}

// 使用示例
const handleScroll = throttle(() => {
  console.log('Scroll event handled');
}, 200);

window.addEventListener('scroll', handleScroll);

结合防抖与节流

某些场景需要先防抖(避免初始频繁触发),后节流(保证后续稳定执行)。

js截流实现

代码示例:

function debounceThrottle(func, debounceTime, throttleTime) {
  let lastCall = 0;
  let timer;
  return function(...args) {
    const now = Date.now();
    clearTimeout(timer);
    if (now - lastCall < throttleTime) {
      timer = setTimeout(() => {
        lastCall = now;
        func.apply(this, args);
      }, debounceTime);
    } else {
      lastCall = now;
      func.apply(this, args);
    }
  };
}

注意事项

  • 性能影响:防抖和节流会减少函数执行次数,但需合理设置延迟时间(如搜索建议建议300ms,滚动事件建议100ms)。
  • this绑定:通过 apply 确保函数执行时的正确上下文。
  • 取消机制:可扩展实现取消功能,例如存储 timer 并提供 cancel 方法。

扩展取消示例:

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

标签: js
分享给朋友:

相关文章

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js分组实现

js分组实现

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

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…

实现继承js

实现继承js

实现继承的方式 在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法: 原型链继承 原型链继承是最基本的继承方式,通过将子类的原型指向父类的实…