函数节流和函数防抖
防抖: 首次点击会立即触发,重复触发点击不会触发,停止后会触发。(个人设计)
节流: 使连续执行的事件或函数,变为固定时间间隔执行
/**
* 节制函数
* @param {Function} method 需要节制的函数
* @param {Number} delay 间隔时间
* @param {Number} duration 超出时间
* @param {Boolean} controlType 1防抖 0节流 默认0
* @return Function
*/
function control(method, delay, duration, controlType) {
let timer = null;
let flag = false;
let start = new Date().getTime();
return function () {
let context = this;
let args = arguments;
if (controlType) {
if (!flag) {
method.apply(context, args);
flag = true;
start = new Date().getTime();
}
if (timer) clearTimeout(timer)
timer = setTimeout(function () {
flag = false;
let end = new Date().getTime();
if (end - start >= duration) {
method.apply(context, args);
start = end;
}
}, delay)
} else {
let end = new Date().getTime();
if (timer) clearTimeout(timer)
if (end - start >= duration) {
method.apply(context, args);
start = end;
} else {
timer = setTimeout(function () {
method.apply(context, args);
start = new Date().getTime();
}, delay)
}
}
}
}