本篇主要封装防抖、节流方法,并简述它们的使用场景:
防抖:
/** * 如果短时间内触发多次同一事件,只执行一次 * @param {*} callback callback: 需要处理的回调函数 * @param {*} delay delay:期限 * @returns */ export function debounce(callback, delay) { return function (event) { // 如果上次事件还没有真正处理, 取消它 // if (callback.timeoutId) { // 会查找原型链 if (callback.hasOwnProperty('timeoutId')) { // 不会查找原型链 // 清除 clearTimeout(callback.timeoutId) } // 发事件发生指定事件后才调用处理事件的回调函数 // 启动定时器, 只是准备真正处理 callback.timeoutId = setTimeout(() => { // 正在处理事件 callback.call(this, event) // 删除准备处理的标记 delete callback.timeoutId }, delay) } }
场景:1输入框的远程搜索,用户在规定的时间内连续输入文字不进行搜索,当输入完毕后,再进行搜索
2.表单操作,防止用户短时间内双击或多次点击,造成重复提交
3.window的resize事件,避免不断调整窗口大小而一直触发该事件,当调整结束后再调用该事件
节流:
/* 如果短时间内触发多次同一事件,那么在函数执行一次之后,在规定时间内不再触发,直至过了这段时间再次触发 callback: 传入回调函数 delay:间隔 */ export function throttle(callback, delay) { let pre = 0 // 默认值不要是Date.now() ==> 第1次事件立即调用 return function (event) { // 节流函数/真正的事件回调函数 this是发生事件的标签 const current = Date.now() if (current - pre > delay) { // 只有离上一次调用callback的时间差大于delay // 调用真正处理事件的函数, this是事件源, 参数是event callback.call(this, event) // 记录此次调用的时间 pre = current } } }
场景:1.轮播图的翻页,避免翻页速度过快,影响页面观感
2.window的scroll事件,每隔一段时间来触发scroll事件
3.表单的提交,修改表单的时候,让其在一段时间内只能修改一次,避免短时间内修改很多次
脚踏实地行,海阔天空飞
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端