防抖节流的含义使用场景及js实现原理
1.防抖:n 秒后在执行该事件,若在 n 秒内被重复触发,则重新计时。代码实现重在清零 clearTimeout。
应用:登录,提交,浏览器窗口的resizes事件,文本编辑保存
//防抖函数 function debounce (f, wait) { //设置一个定时器 let timer; return (...args) => { //单位时间内再次点击将把未来的发生的点击事件扼杀在摇篮之中,并重新计时,类似中断回城 clearTimeout(timer) timer = setTimeout(() => { f(...args) }, wait) } } let count = 0; let divEl = document.getElementById("submitBtn"); //真正执行的请求时间 function moveFn(){ console.log('ajax请求:'+count++) } //divEl.addEventListener("click", moveFn,false) divEl.addEventListener("click", debounce(moveFn, 3000));
2.节流:n 秒内只运行一次,若在 n 秒内重复触发,只有一次生效,响应平滑。
应用:scroll 事件,input的实时搜索
function throttle(func, wait) { // 记录上一次执行 func 的时间 let prev = 0 return function (...args) { // 当前触发的时间(时间戳) const now = Number(new Date()) // 只有当当前时间超过上次点击单位时长后才去执行方法func,类似在公交车站等公交 if (now >= prev + wait) { // 符合条件执行 func 时,需要更新 prev 时间 prev = now func.apply(this, args) } } } divEl.addEventListener("click", throttle(moveFn, 1000));
3.通俗易懂的接地气的防止重复点击的写法
let canCLick = true divEl.addEventListener("click",()=>{ if(canCLick){ canCLick = false console.log('提交') setTimeout(function(){ canCLick = true },1000) } });
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理