简介
在前端开发的过程中,我们经常会需要绑定一些持续触发的事件,如 resize、scroll、mousemove 等等,但有些时候我们并不希望在事件持续触发的过程中那么频繁地去执行函数。
一般采取防抖和节流的方法来解决此类问题
防抖(debounce)
所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。
防抖函数分为非立即执行版和立即执行版
非立即执行版
1 | function debounce(func, wait){ |
效果是第一次触发后延迟 n 秒再执行, 如果在 n 秒内又触发了事件,则会重新计算函数执行时间。
立即执行版
1 | function debounce(func, wait){ |
立即执行版的意思触发事件函数后将立即执行, 然后n秒内不触发事件才能继续执行函数的效果
具体看项目选用哪种防抖函数
节流(throttle)
所谓节流,就是连续触发函数在n秒中只执行一次,也就是控制函数触发的频率
节流有两种方式可以实现:定时器版和时间戳版
定时器版
1 | function throttle(func, wait){ |
时间戳版
1 | function throttle(func, wait){ |
Author: LS
Link: http://lshere.github.io/2019/11/06/%E9%98%B2%E6%8A%96%E4%B8%8E%E8%8A%82%E6%B5%81%E5%87%BD%E6%95%B0/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.