function debounce(fn, dely,immediate = false) {
let timer = null;
let isInvoked = false;
let _debounce = function(...args){
if (timer) {
clearTimeout(timer);
}
if (immediate && !isInvoked) {
fn.apply(this, args);
isInvoked = true;
return;
}
timer = setTimeout(() => {
fn.apply(this, args);
isInvoked = false;
}, dely);
}
_debounce.cancel = function () {
if (timer) {
clearTimeout(timer);
timer = null;
isInvoked = false;
}
}
return _debounce
}
function throttle(fn, interval,immediate=true) {
let startTime = 0;
let t = null;
return function _throttle(...args){
let nowTime = new Date().getTime();
if (!immediate && startTime ===0) {
startTime = nowTime;
}
if (t) {
clearTimeout(t);
}
let waitTime = interval - (nowTime - startTime);
if (waitTime <= 0) {
fn.apply(this,args);
startTime = nowTime;
} else {
t = setTimeout(() => {
fn.apply(this, args);
},interval)
}
}
}