# 防抖和节流
# 防抖
概念
事件被触发 n 秒后再执行回调函数,如果在这 n 秒内被触发,则重新计时。
应用场景
输入框实时搜索、resize、scroll
实现
function debounce(fn, delay) {
return function() {
let that = this;
let args = arguments;
clearTimeout(fn.si);
fn.si = setTimeout(() => {
fn.apply(that, args);
}, delay);
};
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 节流
概念
规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行
应用场景
鼠标不停点击、无限加载、底部自动加载
实现
function throttle(fn, delay) {
let last;
return function() {
let that = this;
let _args = arguments;
let now = Date.now();
if (last && now - last < delay) {
fn.si = setTimeout(() => {
last = now;
fn.apply(that, _args);
}, delay);
} else {
last = now;
fn.apply(that, _args);
clearTimeout(fn.si);
}
};
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18