当前位置:首页 > JavaScript

js throttle实现

2026-04-06 20:19:58JavaScript

函数节流(Throttle)的实现

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

js throttle实现

基础实现方案

使用时间戳判断是否执行函数:

js throttle实现

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

包含首次和末次调用的版本

支持配置是否立即执行首次调用和是否执行延迟期间的最后一次调用:

function throttle(func, delay, options = {}) {
  let lastTime = 0, timer = null;
  const { leading = true, trailing = true } = options;

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

    if (!lastTime && !leading) lastTime = now;

    const remaining = delay - (now - lastTime);

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

使用示例

const throttledScroll = throttle(() => {
  console.log('Scroll event handled');
}, 200);

window.addEventListener('scroll', throttledScroll);

实现要点说明

  • 时间戳方式保证精确的时间间隔控制
  • 定时器方式确保最后一次调用能被执行
  • 配置参数提供灵活性:leading控制首次立即执行,trailing控制末次延迟执行
  • 清除定时器避免内存泄漏
  • 保持正确的this上下文和参数传递

实际应用场景

  • 页面滚动加载更多内容
  • 窗口大小调整时的布局计算
  • 按钮频繁点击的防重复提交
  • 鼠标移动事件的高频触发控制

这种实现方式比简单使用定时器更精确,能保证函数在指定时间间隔内有规律地执行,同时兼顾首次和末次调用的需求。

标签: jsthrottle
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

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

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现图

js实现图

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

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…