当前位置:首页 > JavaScript

throttle js实现

2026-04-06 04:42:28JavaScript

throttle 函数的基本概念

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

throttle js实现

基础实现方式

使用时间戳判断是否执行函数:

throttle js实现

function throttle(func, delay) {
  let lastCall = 0;
  return function(...args) {
    const now = new Date().getTime();
    if (now - lastCall < delay) return;
    lastCall = now;
    return func.apply(this, args);
  };
}

包含首次和末次执行的版本

function throttle(func, delay, options = {}) {
  let lastCall = 0;
  let timer = null;
  const { leading = true, trailing = true } = options;

  return function(...args) {
    const now = new Date().getTime();
    const remaining = delay - (now - lastCall);

    if (remaining <= 0 && leading) {
      lastCall = now;
      func.apply(this, args);
    } else if (trailing && !timer) {
      timer = setTimeout(() => {
        lastCall = new Date().getTime();
        timer = null;
        func.apply(this, args);
      }, remaining);
    }
  };
}

使用场景示例

滚动事件节流处理:

const handleScroll = throttle(() => {
  console.log('处理滚动事件');
}, 200);

window.addEventListener('scroll', handleScroll);

实现注意事项

  • 确保正确绑定函数上下文(this)
  • 考虑边界情况(如delay为0或负数)
  • 清除未执行的定时器避免内存泄漏
  • 支持立即执行和延迟执行选项

现代实现方案

使用requestAnimationFrame的节流版本:

function rafThrottle(func) {
  let ticking = false;
  return function(...args) {
    if (!ticking) {
      requestAnimationFrame(() => {
        func.apply(this, args);
        ticking = false;
      });
      ticking = true;
    }
  };
}

性能优化建议

  • 对于动画相关场景,优先使用requestAnimationFrame
  • 避免在节流函数内执行耗时操作
  • 根据实际需求调整节流时间间隔
  • 考虑使用lodash等库的成熟实现

标签: throttlejs
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现dh

js实现dh

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