实现防抖和节流,原理介绍+应用场景
防抖和节流都是为了解决事件被频繁触发的问题
防抖(debounce)
原理:当持续触发事件时,在设定的时间内没有再次触发事件,则事件才会处理函数一次;如果在设定时间之前再次触发该事件,则重新开启定时器,执行最后一次触发事件
应用场景:
- scroll事件滚动
- 浏览器窗口的缩放resize事件
- 搜索框输入查询
- 表单验证
- 按钮提交
代码实例:
<input type="text"> <script> let inp = document.querySelector("input") inp.oninput = debounce(function () { console.log(this.value) }, 1000) function debounce(fn, delay) { let t = null return function () { if (t !== null) { clearTimeout(t) } t = setTimeout(() => { fn.call(this) }, delay) } } </script>
节流(throttle)
原理:在持续触发事件时,在一定时间内只调用一次事件函数,如果在设定时间内再次触发事件,则不执行,目的就是减少一段时间内的触发频率
应用场景:
- dom元素拖拽功能实现
- 计算鼠标移动距离
- 监听scroll事件滚动
- 搜索提交功能按钮
代码实例
<style>
body {
height: 2000px
}
</style>
<script> window.onscroll = throttle(function () { console.log("滚动") }, 500) function throttle(fn, delay) { let flag = true return function () { if (flag) { setTimeout(() => { fn.call(this) flag = true }, delay) } flag = false } } </script>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南