当前位置:首页 > JavaScript

js实现节流

2026-04-05 18:27:36JavaScript

节流的概念

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

实现方法

方法1:时间戳版

通过比较当前时间与上一次执行时间,决定是否执行函数。

function throttle(fn, delay) {
  let lastTime = 0;
  return function(...args) {
    const now = Date.now();
    if (now - lastTime >= delay) {
      fn.apply(this, args);
      lastTime = now;
    }
  };
}

特点

  • 首次触发立即执行。
  • 停止触发后不会执行最后一次调用。

方法2:定时器版

通过定时器延迟执行函数,确保间隔内仅有一次执行。

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

特点

  • 首次触发延迟执行。
  • 停止触发后会执行最后一次调用。

方法3:结合版(推荐)

结合时间戳和定时器,实现首尾均执行的节流。

function throttle(fn, delay) {
  let lastTime = 0, timer = null;
  return function(...args) {
    const now = Date.now();
    const remaining = delay - (now - lastTime);
    if (remaining <= 0) {
      if (timer) {
        clearTimeout(timer);
        timer = null;
      }
      fn.apply(this, args);
      lastTime = now;
    } else if (!timer) {
      timer = setTimeout(() => {
        fn.apply(this, args);
        lastTime = Date.now();
        timer = null;
      }, remaining);
    }
  };
}

特点

  • 首次和最后一次均会执行。
  • 间隔内严格保证一次执行。

使用示例

监听滚动事件并节流处理:

js实现节流

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

window.addEventListener('scroll', handleScroll);

应用场景

  • 页面滚动加载更多内容。
  • 输入框实时搜索建议(减少请求频率)。
  • 窗口大小调整事件优化。

标签: js
分享给朋友:

相关文章

js实现变形

js实现变形

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

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…

js实现刷新

js实现刷新

刷新当前页面 使用 location.reload() 方法可以强制刷新当前页面。该方法接受一个布尔参数,默认为 false,表示从缓存中加载页面;设为 true 时强制从服务器重新加载。 // 从…

js实现筛选

js实现筛选

JavaScript 实现数据筛选的方法 使用 Array.filter() 方法 Array.filter() 是 JavaScript 中最常用的筛选方法,它会创建一个新数组,包含通过回调函数测试…