当前位置:首页 > JavaScript

js截流怎么实现

2026-02-03 02:09:51JavaScript

实现 JavaScript 截流(Throttling)的方法

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

使用时间戳实现基础截流

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

js截流怎么实现

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);
    }
  };
}

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

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

js截流怎么实现

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);

实际应用示例

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

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

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

标签: js
分享给朋友:

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.defin…

jquery.js

jquery.js

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

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…