当前位置:首页 > 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.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js 实现进度条

js 实现进度条

使用 HTML 和 CSS 创建基础结构 进度条需要一个容器和一个填充元素。HTML 结构可以简单如下: <div class="progress-container"> <d…

vue.js实现restful

vue.js实现restful

Vue.js 实现 RESTful API 调用 在 Vue.js 中实现 RESTful API 调用通常涉及以下几个关键步骤: 安装 Axios Axios 是一个流行的 HTTP 客户端,用于…

vue.js 实现翻转

vue.js 实现翻转

Vue.js 实现翻转效果 在Vue.js中实现翻转效果可以通过CSS动画或过渡结合Vue的响应式特性完成。以下是几种常见方法: 使用CSS过渡实现翻转 通过Vue的v-bind:class…