当前位置:首页 > 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实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现复制到剪贴板

js实现复制到剪贴板

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

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…