防抖和节流
- 概念:
-
- 防抖(debounce):延迟一定时间执行函数。在指定的时间间隔内,无论触发多少次函数,只有最后一次函数会在间隔时间结束后执行。
- 节流(throttle):控制函数执行的频率,在一定时间间隔内只执行一次函数。
2. 应用:
-
- 防抖:
- 搜索框输入:只有用户停止输入后才执行搜索功能。
- 按钮点击:防止误操作,用户连续点击只执行最后一次操作。
- 节流:
- 监听面板宽高改变事件:按照一定的频率执行函数。
- 监听slider滑块变化事件:按照一定的频率执行函数。
- 监听滚动条事件:按照一定的频率执行函数。
- 防抖:
3. 代码实现:
-
- 防抖:
1 // 防抖函数 2 function debounce(fn, delay) { 3 let timer; 4 return function() { 5 if(timer) clearTimeout(timer); 6 timer = setTimeout(()=>{ 7 fn(); 8 }, delay); 9 } 10 } 11 12 13 // 测试方法, 给id="aaa"的元素绑定点击事件,一直点击aaa元素,点击停止1s后,控制台输出1; 14 function log(){ 15 console.log(1); 16 } 17 18 const newLog = debounce(log, 1000); 19 20 document.getElementById("aaa").onclick=function(){ 21 newLog(); 22 };
- 节流:
// 节流函数 function throttle(fn, limit) { let valid = true; return function() { if (!valid) return; valid = false; setTimeout(()=>{ fn(); valid = true; }, limit) } } // 测试防范,给id="aaa"的元素绑定点击事件,一直点击aaa元素,每隔1s,控制台输出1; function log(){ console.log(1); } const newLog = throttle(log, 1000); document.getElementById("aaa").onclick=function(){ newLog(); };
- 防抖:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通