防抖节流
实现思路:
- 定义一个定时器。
- 当事件被触发时,如果定时器已存在,则清除它。
- 重新设置定时器,延迟执行回调函数。
防抖
防抖技术的基本思想是:在事件被触发 n 秒后再执行回调,如果在这 n 秒内又被触发,则重新计时。这适用于那些需要等待用户停止操作后才执行的场景,比如搜索框的搜索提示、输入框的验证等。
实现思路:
- 定义一个定时器。
- 当事件被触发时,如果定时器已存在,则清除它。
- 重新设置定时器,延迟执行回调函数。
代码实现:
js
function debounce(func, wait) {
let timeout;
return function () {
const context = this,
args = arguments;
clearTimeout(timeout);
timeout = setTimeout(() => {
func.apply(context, args);
}, wait);
};
}
节流
节流技术的基本思想是:规定在单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次能生效。这适用于那些需要控制执行频率的场景,比如滚动加载图片、自动完成等。
实现思路:
- 记录上一次执行的时间。
- 当事件被触发时,比较当前时间和上一次执行时间的差是否达到了指定的时间间隔。
- 如果达到了,则执行函数,并更新上一次执行时间。
代码实现:
js
function throttle(func, limit) {
let flag;
return function () {
const args = arguments;
const context = this;
if (!flag) {
func.apply(context, args);
flag = true;
setTimeout(() => (flag = false), limit);
}
};
}