当前位置:首页 > JavaScript

throttle js实现

2026-04-06 04:42:28JavaScript

throttle 函数的基本概念

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

基础实现方式

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

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的节流版本:

throttle js实现

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

性能优化建议

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

标签: throttlejs
分享给朋友:

相关文章

js 实现vue模板

js 实现vue模板

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

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…