当前位置:首页 > JavaScript

节流js实现

2026-02-28 20:15:11JavaScript

节流(Throttle)的 JavaScript 实现

节流是一种限制函数执行频率的技术,确保函数在指定时间间隔内最多执行一次。适用于高频触发的事件(如滚动、鼠标移动等)。

基本实现原理

通过时间戳或定时器控制函数执行频率。以下是两种常见的实现方式:

节流js实现

时间戳版本

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

定时器版本

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

优化版本(结合两者)

结合时间戳和定时器,确保最后一次触发能执行:

function throttle(func, delay) {
  let lastTime = 0;
  let timeoutId = null;
  return function(...args) {
    const now = Date.now();
    const remaining = delay - (now - lastTime);

    if (remaining <= 0 || remaining > delay) {
      if (timeoutId) {
        clearTimeout(timeoutId);
        timeoutId = null;
      }
      func.apply(this, args);
      lastTime = now;
    } else if (!timeoutId) {
      timeoutId = setTimeout(() => {
        func.apply(this, args);
        timeoutId = null;
        lastTime = Date.now();
      }, remaining);
    }
  };
}

使用示例

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

window.addEventListener('scroll', throttledScrollHandler);

注意事项

  • 节流时间间隔需根据实际场景调整,过短可能无法达到性能优化效果,过长可能影响用户体验。
  • 如果函数需要返回值,需额外处理(通常节流函数不直接返回结果)。
  • 确保清除定时器以避免内存泄漏。

标签: js
分享给朋友:

相关文章

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js实现继承

js实现继承

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

js 实现继承

js 实现继承

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

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现论坛

js实现论坛

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

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: cons…