JS的防抖与节流
springboot实战电商我的项目mall4j (https://gitee.com/gz-yami/mall4j)
什么是防抖?
函数防抖(debounce): 在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则从新计时
什么是节流
函数节流(throttle): 规定一个单位工夫,在这个单位工夫内,只能有一次触发事件的回调函数执行,如果在同一个单位工夫内某事件被触发屡次,只有一次能失效。
利用场景
对于函数防抖,有以下几种利用场景:
- 给按钮加函数防抖避免表单屡次提交。
- 对于输入框间断输出进行AJAX验证时,用函数防抖能无效缩小申请次数。
总的来说,适宜屡次事件一次响应的状况
对于函数节流,有如下几个场景:
- 游戏中的刷新率
- DOM元素拖拽
- Canvas画笔性能
总的来说,适宜大量事件按工夫做均匀调配触发。
函数防抖
function debounce (fn, wait) { let timer return (...args) => { clearTimeout(timer) timer = setTimeout(() => { fn(...args) }, wait) }
函数节流
function throttle (fn, wait) { let timer return (...args) => { if (timer) { return } timer = setTimeout(() => { fn(...args) timer = null }, wait) }
小结
- 防抖:避免抖动,单位工夫内事件触发会被重置,防止事件被误伤触发屡次。代码实现重在清零
clearTimeout
- 节流:管制流量,单位工夫内事件只能触发一次,代码实现重在开锁关锁
timer=timeout; timer=null
springboot实战电商我的项目mall4j (https://gitee.com/gz-yami/mall4j)