函数防抖(debounce)
在事件被触发后n秒内再执行回调,如果在这段时间内再次触发,则重新开始计时
防抖使用的场景:
- 在搜索时,输入文字后一段时间内开始自动搜索,而不是每次按键都执行搜索操作
- window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次
虽然知道概念,但是面试时让我写一个通用的防抖函数,有一点懵,下面贴代码:
const debounce = (fn, ms = 0) => {
let timeoutId;
return function(...args) {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => fn.apply(this, args), ms);
};
};
函数节流(throttle)
在一个规定时间内,最多只能触发一次,即第一次触发后,至少间隔一个规定时间,才会触发第二次。
使用场景:
- 鼠标不断点击触发,mousedown(单位时间内只触发一次)
- 监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断
const throttle = (fn, ms) => {
let flag = true;
return function(...args) {
if(flag) {
fn.apply(this, args);
flag = false;
setTimeout(() => {
flag = true;
}, ms);
}
}
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!