当前位置:首页 > 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 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…

js 实现拖拽

js 实现拖拽

实现拖拽的基本步骤 在JavaScript中实现拖拽功能需要监听几个关键事件:mousedown、mousemove和mouseup。以下是实现的基本逻辑。 监听目标元素的mousedown事件,记…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…