当前位置:首页 > JavaScript

js截流怎么实现

2026-02-03 02:09:51JavaScript

实现 JavaScript 截流(Throttling)的方法

截流(Throttling)是一种控制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。以下是几种常见的实现方式:

使用时间戳实现基础截流

通过比较当前时间与上一次执行时间来判断是否执行函数。

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

使用定时器实现延迟执行

在延迟时间内只设置一次定时器,确保函数在延迟结束后执行。

function throttle(func, delay) {
  let timeoutId = null;
  return function(...args) {
    if (!timeoutId) {
      timeoutId = setTimeout(() => {
        func.apply(this, args);
        timeoutId = null;
      }, delay);
    }
  };
}

结合时间戳和定时器的优化版本

首次触发立即执行,后续触发在延迟结束后执行,同时确保最后一次触发被执行。

function throttle(func, delay) {
  let lastCall = 0;
  let timeoutId = null;
  return function(...args) {
    const now = new Date().getTime();
    const remaining = delay - (now - lastCall);
    if (remaining <= 0) {
      if (timeoutId) {
        clearTimeout(timeoutId);
        timeoutId = null;
      }
      func.apply(this, args);
      lastCall = now;
    } else if (!timeoutId) {
      timeoutId = setTimeout(() => {
        func.apply(this, args);
        timeoutId = null;
        lastCall = new Date().getTime();
      }, remaining);
    }
  };
}

使用 Lodash 库的截流函数

如果项目中已引入 Lodash,可以直接使用其提供的 _.throttle 方法。

const throttledFunc = _.throttle(originalFunc, 300);

实际应用示例

以下是一个滚动事件中使用截流的例子:

js截流怎么实现

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

截流技术适用于高频触发的事件(如滚动、窗口调整、鼠标移动等),可以有效减少不必要的计算或请求,提升性能。

标签: js
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 jQ…

js实现复制到剪贴板

js实现复制到剪贴板

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

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js钟表实现

js钟表实现

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