当前位置:首页 > JavaScript

js throttle实现

2026-03-15 02:41:06JavaScript

节流(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) {
            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
分享给朋友:

相关文章

jquery.js

jquery.js

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

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现防洪

js实现防洪

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