当前位置:首页 > JavaScript

throttle js实现

2026-02-01 11:58:27JavaScript

throttle js实现

throttle js实现

throttle 函数实现

节流(throttle)是一种限制函数执行频率的技术,确保函数在指定时间间隔内最多执行一次。常用于优化滚动、窗口调整等高频事件。

基础实现

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

包含 leading 和 trailing 选项的增强版

function throttle(func, delay, options = {}) {
  let timeoutId, lastCall = 0;
  const { leading = true, trailing = true } = options;

  return function(...args) {
    const now = Date.now();
    const context = this;

    if (!lastCall && !leading) lastCall = now;
    const remaining = delay - (now - lastCall);

    if (remaining <= 0 || remaining > delay) {
      if (timeoutId) {
        clearTimeout(timeoutId);
        timeoutId = null;
      }
      lastCall = now;
      func.apply(context, args);
    } else if (!timeoutId && trailing) {
      timeoutId = setTimeout(() => {
        lastCall = !leading ? 0 : Date.now();
        timeoutId = null;
        func.apply(context, args);
      }, remaining);
    }
  };
}

使用示例

// 基础用法
window.addEventListener('resize', throttle(() => {
  console.log('窗口大小改变');
}, 200));

// 带选项用法
window.addEventListener('scroll', throttle(() => {
  console.log('滚动事件');
}, 100, { leading: false, trailing: true }));

实现要点

  • 时间戳方式确保首次触发立即执行
  • 定时器方式确保最后一次触发被执行
  • 选项参数控制是否立即执行和是否执行尾调用
  • 清除多余定时器避免内存泄漏
  • 保持正确的函数上下文和参数传递

注意事项

  • 节流时间间隔需根据实际场景调整
  • 避免在节流函数中执行耗时操作
  • 组件卸载时需要移除事件监听器
  • 对于动画场景,requestAnimationFrame 可能是更好的选择

标签: throttlejs
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现vr

js实现vr

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

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js节流实现

js节流实现

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

js实现刷新页面

js实现刷新页面

刷新页面的方法 在JavaScript中,可以通过多种方式实现页面刷新。以下是几种常见的方法: 使用 location.reload() 调用 location.reload() 方法可以重新加载当…