当前位置:首页 > JavaScript

js截流实现

2026-03-15 02:34:23JavaScript

截流(Throttling)的实现方法

截流是一种限制函数调用频率的技术,确保函数在指定时间间隔内最多执行一次。适用于滚动事件、窗口调整等高频触发的场景。

基础实现方案

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

包含尾部调用保证的版本

function throttle(func, delay) {
  let timerId;
  let lastCall = 0;

  return function(...args) {
    const now = Date.now();
    const remaining = delay - (now - lastCall);

    clearTimeout(timerId);

    if (remaining <= 0) {
      func.apply(this, args);
      lastCall = now;
    } else {
      timerId = setTimeout(() => {
        func.apply(this, args);
        lastCall = Date.now();
      }, remaining);
    }
  };
}

使用示例

window.addEventListener('scroll', throttle(function() {
  console.log('Scroll event handler');
}, 200));

与防抖(Debounce)的区别

截流保证定期执行,而防抖只在停止操作后执行一次。高频事件处理时:

  • 截流更适合实时反馈场景
  • 防抖更适合最终状态确认场景

现代浏览器原生方案

现代浏览器支持requestAnimationFrame实现更流畅的动画节流:

js截流实现

function rafThrottle(func) {
  let ticking = false;
  return function(...args) {
    if (!ticking) {
      requestAnimationFrame(() => {
        func.apply(this, args);
        ticking = false;
      });
      ticking = true;
    }
  };
}

注意事项

  • 时间间隔参数需要根据实际场景调整
  • 确保清除定时器避免内存泄漏
  • 考虑this绑定和参数传递问题
  • 移动端可能需要更长的间隔时间

这些实现方案可根据具体需求选择使用,基础版本已能满足多数场景需求,特殊场景可选用尾部调用保证版本或RAF方案。

标签: js
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promise…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现列表

js实现列表

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

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js分组实现

js分组实现

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

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…