当前位置:首页 > JavaScript

js截流实现

2026-03-15 02:34:23JavaScript

截流(Throttling)的实现方法

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

js截流实现

基础实现方案

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)的区别

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

js截流实现

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

现代浏览器原生方案

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

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

注意事项

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

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

标签: js
分享给朋友:

相关文章

js实现列表

js实现列表

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

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…