新闻中心

JS节流防抖怎么实现_JS函数节流throttle与防抖debounce方法教程

2025-11-10
浏览次数:
返回列表
防抖指连续触发时只执行最后一次,节流指单位时间最多执行一次;前者适用于搜索框等需等待操作停止的场景,后者适用于滚动监听等需稳定响应频率的场景。

js节流防抖怎么实现_js函数节流throttle与防抖debounce方法教程

节流(throttle)和防抖(debounce)是前端开发中常用的优化手段,主要用于控制函数的执行频率,避免在高频触发场景下造成性能问题。比如窗口滚动、输入框搜索、按钮重复点击等场景。下面介绍它们的原理与实现方式。

什么是防抖(debounce)

防抖的原理是:当事件被频繁触发时,只执行最后一次操作。如果在设定的时间内再次触发,则重新计时。

适用于:搜索框输入联想、表单验证、窗口resize后重新计算布局等。

防抖实现方法:

使用定时器记录每次触发,若在延迟时间内再次触发,则清除旧定时器,重新设置。

function debounce(func, delay) {
  let timer;
  return function (...args) {
    const context = this;
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(context, args);
    }, delay);
  };
}

使用示例:

const searchInput = document.getElementById('search');
searchInput.addEventListener('input', debounce(function(e) {
  console.log('搜索:', e.target.value);
}, 300));

什么是节流(throttle)

节流的原理是:规定一个单位时间,在这个时间内最多只执行一次函数。即使事件被频繁触发,函数也按固定节奏执行。

适用于:页面滚动监听、鼠标移动、按钮防止重复提交等。

火龙果写作 火龙果写作

用火龙果,轻松写作,通过校对、改写、扩展等功能实现高质量内容生产。

火龙果写作 277 查看详情 火龙果写作

节流实现方法(时间戳方式):

通过记录上次执行时间,判断当前时间是否超过设定间隔,决定是否执行函数。

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

节流实现方法(定时器方式):

使用定时器确保每隔一段时间执行一次。

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

使用示例:

window.addEventListener('scroll', throttle(() => {
  console.log('页面滚动');
}, 100));

节流与防抖的区别总结

防抖关注的是“最后一次操作”,适合需要等待用户停止操作后再执行的场景;节流关注的是“稳定频率执行”,适合需要持续响应但不能太频繁的场景。

  • 防抖:连续触发只执行最后一次
  • 节流:固定时间间隔内最多执行一次

实际项目中可以根据需求选择合适的方式,也可以结合使用。基本上就这些,不复杂但容易忽略细节。掌握好这两个技巧,能有效提升应用性能。

以上就是JS节流防抖怎么实现_JS函数节流throttle与防抖debounce方法教程的详细内容,更多请关注其它相关文章!


# 的是  # 网上营销推广文案范文  # 靠谱seo外包公司  # b2c网站营销推广方法  # seo重复铺货  # 福州论坛推广营销  # 金融产品营销与推广论文  # 营销网站建设工具  # 肇庆卫浴网站seo优化  # 秦皇岛网站推广巍薪hfqjwl下拉  # 十堰刷百度关键词排名  # 何为  # 绑定  # 弹出  # js完整使用教程  # 背景色  # 时间内  # 最多  # 适用于  # 表单  # 防抖  # 区别  # win  # 前端开发  # 联想  # app  # 前端  # js 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 解决Flask中Quill编辑器内容提交失败及TypeError的指南  LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比  Selenium Python中处理点击后新窗口加载冻结问题的策略与实践  taptap防沉迷怎么解除 taptap解除健康系统限制说明【2025最新】  邮政快递包裹最新位置 邮政快递实时追踪入口  在J*a中如何开发在线活动报名与管理系统_活动报名管理项目实战解析  Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性  Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】  J*aScript数组对象转换:按指定键分组与值收集  钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧  火锅吃太多会怎样 火锅吃太多会上火吗  c++如何实现一个简单的ECS框架_c++数据驱动设计与游戏开发  Golang如何使用new_Go new分配内存机制讲解  解决Django多数据库/多Schema环境下外键迁移问题  word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法  怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】  小红书怎么解除第三方平台绑定_小红书多平台登录解绑方法介绍  《主播少女的秘密账号迷宫》首支宣传片  菜鸟取件码是什么怎么查 最全查询渠道汇总  WordPress插件开发:正确注册卸载钩子与避免常见陷阱  深入理解J*a链表中的IPosition接口与使用  R星幕后开发视频泄露 包含《GTA6》等多款大作  《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元  零跑汽车11月交付量达70327台 实现连续9个月正增长  QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台  TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法  Flexbox布局实践:实现粘性导航栏与底部固定页脚  实现分段式页面滚动导航:CSS与J*aScript教程  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  处理Kafka消费者会话超时:深入理解消息处理语义与幂等性  mcjs网页版流畅运行 mcjs低配电脑畅玩入口  JUnit5/Mockito:优雅测试内部依赖与异常处理的实践  React项目中导航栏Logo自适应布局:避免裁剪与布局溢出  C++ vector二维数组定义_C++ vector of vector用法  jQuery Mask 插件中实现电话号码固定前导零的教程  照顾宝贝2小游戏免费秒玩入口  在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南  Composer如何处理Git子模块(submodule)依赖_Composer与Git Submodule的对比与选择  如何在Python中使用Optional类型处理可变对象并避免Pylint警告  荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】  在python-socketio事件处理器中安全访问Flask应用上下文  J*a实现学校排课程序_面向对象结构化项目示例  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  windows10怎么查看本机ip_windows10命令提示符ipconfig使用  Golang如何使用net/url解析URL_Golang URL解析与处理方法  知乎APP怎么管理已购盐选内容_知乎APP盐选内容购买记录与查看方法  PHP中SSG-WSG API的AES加密实践:正确使用初始化向量  在命令行怎么运行html项目_命令行运行html项目方法【教程】  在J*a中如何隐藏复杂性_使用门面模式组织对象交互  Linux如何构建多环境配置管理_Linux多环境配置方案 

搜索