当前位置:首页 > JavaScript

js实现节流

2026-02-01 02:05:25JavaScript

节流的概念

节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。常用于高频事件(如滚动、输入、窗口调整大小等)的性能优化。

基础实现方式

使用时间戳判断是否执行函数。记录上次执行时间,若当前时间与上次执行时间的差值大于设定阈值,则执行函数并更新上次执行时间。

js实现节流

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实现节流

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

结合时间戳与定时器

结合两种方式确保最后一次调用会被执行(适用于需要触发尾调用的情况)。

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);
    }
  };
}

使用场景示例

滚动事件节流,避免频繁触发回调。

window.addEventListener('scroll', throttle(() => {
  console.log('Scroll event throttled');
}, 200));

注意事项

  • 时间间隔(delay)需根据实际场景调整,过短可能无法有效节流,过长可能导致响应延迟。
  • 确保函数执行时的上下文(this)和参数正确传递。
  • 对于需要取消节流的场景,可扩展实现返回取消函数。

标签: js
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

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

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js 实现链表

js 实现链表

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

jquery js

jquery js

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