函数节流和防抖(常用于对dom绑定事件的回调进行触发频率控制)
节流
回调事件只在指定的时间间隔后触发,用于控制执行的频率
// 节流: 事件回调函数(fn)在指定间隔时间(timer)后触发
throttle (fn, timer) {
let flag = true;
return function () {
if (!flag) return;
flag = false;
window.setTimeout(function () {
fn.apply(this, arguments); // 改变this指针,执行回调函数
flag = true;
}, timer);
};
};
fn1 () {
cnsole.log('aaa');
};
$(window).on('scroll', throttle(fn1,300));
典型应用场景:滚动加载,滚动时进行数据的动态加载,不希望每次scroll事件都执行回调,而是在滚动指定时间后执行回调。
防抖
只需要在最后一次触发时执行回调函数(用于在一定时间内没有触发事件的情况下执行)
// 防抖: 在指定时间(timer)内没有再次触发事件,则执行回调(fn)
debounce (fn, timer) {
let setTimeout = null;
return function () {
window.clearTimeout(setTimeout);
setTimeout = window.setTimeout(function () {
fn.apply(this, arguments);
}, timer);
};
},
典型应用场景: 希望在input输入智能推荐,在输入完毕300ms后无输入则执行事件。