防抖和节流

防抖(debounce)和节流(throttle)是两种常用的优化高频触发事件的方法。

防抖:当持续触发事件时,一定时间段内没有再触发事件,函数才会执行一次,如果在这个时间段内又触发了事件,则会重新开始延时。常用于输入框搜索、滚动加载等场景。

节流:当持续触发事件时,保证一定时间段内只触发一次事件处理函数。常用于滚动监听、窗口大小改变等场景。

防抖:

通俗来说就是我输入一个a后再规定时间内又输入一个a,第二输入触发的时候会删除上一次的定时器,所以只会执行第二次的aa

js 复制代码
// 防抖函数
function debounce(func, wait) {
  let timeout;
  return function() {
    const context = this;
    const args = arguments;
    clearTimeout(timeout);
    timeout = setTimeout(function() {
      func.apply(context, args);
    }, wait);
  };
}

节流

通俗来说就是我输入第一个a后,在a的定时器结束之前,后续所以的输入触发我全都不管

js 复制代码
// 节流函数
function throttle(func, wait) {
  let timeout;
  return function() {
    const context = this;
    const args = arguments;
    if (!timeout) {
      timeout = setTimeout(function() {
        timeout = null;
        func.apply(context, args);
      }, wait);
    }
  };
}

触发他们

html 复制代码
<style>
  html{
    height: 500vh;
  }
</style>
<body>
  
</body>
<script src="./debounce.js"></script>
<script src="./throttle.js"></script>
<script>
  // 防抖示例
const debouncedSearch = debounce(function() {
  console.log('防抖搜索');
}, 500);
window.addEventListener('scroll', debouncedSearch);

// 节流示例
const throttledScroll = throttle(function() {
  console.log('节流行为');
}, 500);
window.addEventListener('scroll', throttledScroll);

</script>
相关推荐
invicinble43 分钟前
c端系统,其实更像一个信息展示平台
前端
你怎么知道我是队长1 小时前
JavaScript的变量和数据类型介绍
开发语言·javascript·ecmascript
李姆斯2 小时前
管理是否可以被完全量化
前端·产品经理·团队管理
名字还没想好☜2 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
广州灵眸科技有限公司2 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能
心中有国也有家3 小时前
AtomGit Flutter 鸿蒙客户端:ModalBottomSheet 实战
android·javascript·学习·flutter·华为·harmonyos
江华森3 小时前
Web 开发基础:HTTP 与 REST
前端·网络协议·http
IT_陈寒4 小时前
Redis的KEYS命令把我搞崩溃了,改用SCAN才活过来
前端·人工智能·后端
Jackson__4 小时前
为什么 Agent 越聊越慢?聊聊 Context(上下文)管理
前端·agent·ai编程
KaMeidebaby4 小时前
卡梅德生物技术快报|抗体合成:多肽抗体合成工程化方案:Nsp2 保守肽多抗制备与多维度验证
前端·网络·数据库·人工智能·算法