当前位置:首页 > JavaScript

js throttle实现

2026-04-06 20:19:58JavaScript

函数节流(Throttle)的实现

函数节流是一种限制函数调用频率的技术,确保函数在特定时间间隔内只执行一次。适用于滚动事件、窗口调整等高频触发的场景。

js throttle实现

基础实现方案

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

js 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, options = {}) {
  let lastTime = 0, timer = null;
  const { leading = true, trailing = true } = options;

  return function(...args) {
    const now = Date.now();
    const context = this;

    if (!lastTime && !leading) lastTime = now;

    const remaining = delay - (now - lastTime);

    if (remaining <= 0) {
      if (timer) {
        clearTimeout(timer);
        timer = null;
      }
      func.apply(context, args);
      lastTime = now;
    } else if (!timer && trailing) {
      timer = setTimeout(() => {
        func.apply(context, args);
        lastTime = leading ? Date.now() : 0;
        timer = null;
      }, remaining);
    }
  };
}

使用示例

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

window.addEventListener('scroll', throttledScroll);

实现要点说明

  • 时间戳方式保证精确的时间间隔控制
  • 定时器方式确保最后一次调用能被执行
  • 配置参数提供灵活性:leading控制首次立即执行,trailing控制末次延迟执行
  • 清除定时器避免内存泄漏
  • 保持正确的this上下文和参数传递

实际应用场景

  • 页面滚动加载更多内容
  • 窗口大小调整时的布局计算
  • 按钮频繁点击的防重复提交
  • 鼠标移动事件的高频触发控制

这种实现方式比简单使用定时器更精确,能保证函数在指定时间间隔内有规律地执行,同时兼顾首次和末次调用的需求。

标签: jsthrottle
分享给朋友:

相关文章

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现防洪

js实现防洪

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

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…

js 实现文件上传

js 实现文件上传

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。以下是一个基础示例: <input ty…