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

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现分页

js实现分页

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

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaS…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…