当前位置:首页 > JavaScript

js throttle实现

2026-02-02 03:10:23JavaScript

实现 JavaScript 的 throttle(节流)函数

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

定时器版本

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

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

结合两种方式的优点,确保首次立即执行且最后一次触发也会执行:

js throttle实现

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

使用示例

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

window.addEventListener('scroll', throttledScrollHandler);

注意事项

  • 时间戳版本会立即执行第一次调用,但可能忽略最后一次触发。
  • 定时器版本会确保最后一次触发被执行,但首次调用会有延迟。
  • 优化版结合了两者的优点,但代码复杂度稍高。
  • 注意清除定时器避免内存泄漏。

标签: jsthrottle
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…