首页 > web前端 > js教程 > 正文

JavaScript中的事件节流(Throttling)与防抖(Debouncing)如何实现?

幻影之瞳
发布: 2025-10-03 08:15:02
原创
724人浏览过
节流是每隔一段时间执行一次,防抖是等事件停止触发一段时间后才执行。节流通过记录上次执行时间控制频率,适用于滚动监听等场景;防抖通过清除并重启定时器将多次触发合并为一次,适用于搜索输入等需等待操作结束的场景。两者均用于优化高频事件处理,提升性能与用户体验。

javascript中的事件节流(throttling)与防抖(debouncing)如何实现?

事件节流(Throttling)和防抖(Debouncing)是JavaScript中优化高频事件执行的常用技术,比如窗口滚动、调整大小、输入框输入等场景。它们都能控制函数执行频率,但机制不同。

什么是事件节流(Throttling)

节流的目的是在指定时间间隔内,最多只执行一次函数。即使事件被频繁触发,回调函数也会按固定频率执行。

实现思路:记录上次执行时间,每次触发时判断当前时间与上次执行时间的差值,超过设定间隔才允许执行,并更新执行时间。

示例代码:

function throttle(fn, delay) {
    let lastExecTime = 0;
    return function (...args) {
      const now = Date.now();
      if (now - lastExecTime > delay) {
        fn.apply(this, args);
        lastExecTime = now;
      }
    };
  }
<p>// 使用示例
window.addEventListener('scroll', throttle(() => {
console.log('节流:滚动事件触发');
}, 1000));
登录后复制

什么是防抖(Debouncing)

防抖的目的是将多次触发合并为最后一次执行。只要事件持续触发,函数就不会执行,只有当事件停止触发一段时间后才执行一次。

立即学习Java免费学习笔记(深入)”;

AI抖音
AI抖音

AI抖音,会思考的抖音

AI抖音167
查看详情 AI抖音

常见于搜索框输入、窗口调整等需要“等待用户操作结束”的场景。

示例代码:

function debounce(fn, delay) {
    let timer = null;
    return function (...args) {
      clearTimeout(timer);
      timer = setTimeout(() => {
        fn.apply(this, args);
      }, delay);
    };
  }
<p>// 使用示例
document.getElementById('searchInput').addEventListener('input', debounce((e) => {
console.log('防抖:执行搜索', e.target.value);
}, 300));
登录后复制

节流与防抖的区别

  • 节流:保证在一定时间内至少执行一次,适合需要定期响应的场景,如滚动监听上报行为。
  • 防抖:只在静止期后执行一次,适合等待用户操作完成再处理,如输入后搜索。

简单记:节流是“每隔一段时间执行”,防抖是“等你不点了再执行”。

基本上就这些。根据实际需求选择合适的方式,能显著提升性能和用户体验。

以上就是JavaScript中的事件节流(Throttling)与防抖(Debouncing)如何实现?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号