防抖与节流(1)--防抖封装
防抖与节流
对大部分程序员来说 对这个已经很熟悉了,因为在我们代码中时常会用到。每次的复习熟系都会有不同的收获
防抖
定义:n 秒后在执行该事件,若在 n 秒内被重复触发,则重新计时 n秒后执行该事件
应用场景:对一些触发比较频繁的事件进行进行处理,防止页面的卡顿
- window 的 resize、scroll
- mousedown、mousemove
- keyup、keydown
- input 的 input 事件
如果有这么一个需求是:有一个搜索的input框 在每次输入内容时自动会搜索或者有可选的热门话题。当我们监听input 的 input 事件会发现触发次数过多,请求后台过多,造成了资源的浪费。
解决办法就是:防抖 ---减少请求后端的次数
--------------上代码-------------
<body> <input type="text"> <script> let input = document.querySelector("input"); input.addEventListener('input',function(){ console.log(this.value);//请求接口 }) </script> </body>
进行防抖处理
let input = document.querySelector("input"); let time = null;//time用来控制事件的触发 input.addEventListener('input',function(){ //防抖语句 if(time !== null){ clearTimeout(time); } time = setTimeout(() => { console.log(this.value); },500) })
进行封装
let input = document.querySelector("input"); input.addEventListener('input',shake(function(){ console.log(this.value);//处理数据请求后端 },500) ) function shake(fn,times){ let time = null;//time用来控制事件的触发 //形成闭包 return function(){ if(time !== null){ clearTimeout(time); } time = setTimeout(() => { fn.call(this); //利用call(),让this的指针从指向window 转成指向input },times) } }
这是input防抖一个场景的应用。
下回带来的是节流,跟防抖可以称之为js中双剑客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通