当前位置:首页 > JavaScript

js节流实现

2026-04-03 20:42:45JavaScript

节流的基本概念

节流(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;
        }
    };
}

特点

js节流实现

  • 首次触发立即执行(时间差为0)。
  • 最后一次触发可能不执行(若时间间隔未达到)。

定时器实现方式

通过定时器控制函数执行,确保延迟时间内仅触发一次。

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

特点

js节流实现

  • 首次触发延迟执行(需等待定时器)。
  • 最后一次触发会延迟执行(定时器结束后执行)。

结合时间戳与定时器

结合两种方式,确保首次和最后一次均能触发。

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

特点

  • 首次触发立即执行。
  • 最后一次触发延迟执行(剩余时间内)。

应用示例

监听滚动事件并使用节流优化:

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

window.addEventListener('scroll', handleScroll);

注意事项

  • this 绑定:确保函数内 this 正确指向,通过 apply 或箭头函数处理。
  • 参数传递:使用剩余参数(...args)保留原始事件参数。
  • 取消节流:可扩展实现取消定时器的逻辑(如 throttle.cancel())。

与防抖(Debounce)的区别

  • 节流:固定间隔内执行一次(均匀分布)。
  • 防抖:停止触发后延迟执行(最后一次有效)。

标签: js
分享给朋友:

相关文章

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js实现乘法

js实现乘法

实现乘法运算的方法 在JavaScript中实现乘法运算可以通过多种方式完成,以下列举几种常见方法: 基础运算符 直接使用乘法运算符*是最简单的方式: let result = 3 * 5; //…

js 实现按钮点击

js 实现按钮点击

实现按钮点击的 JavaScript 方法 HTML 按钮元素 在 HTML 中创建一个按钮,可以通过 <button> 或 <input> 标签实现: <button…