@cch137/format-utils
Version:
A collection of utility modules for formatting and processing data
60 lines (59 loc) • 1.64 kB
JavaScript
export function throttle(func, delay, leading = true) {
let lastTime = 0;
let timer = null;
let lastArgs = null;
return ((...args) => {
const now = Date.now();
const remaining = delay - (now - lastTime);
lastArgs = args;
if (remaining <= 0) {
if (timer) {
clearTimeout(timer);
timer = null;
}
if (leading || lastTime !== 0) {
func(...args);
lastTime = now;
lastArgs = null;
}
else {
lastTime = now;
}
}
else if (!timer && !leading) {
timer = setTimeout(() => {
lastTime = Date.now();
timer = null;
if (lastArgs) {
func(...lastArgs);
lastArgs = null;
}
}, remaining);
}
});
}
export function debounce(func, delay, maxDelay = delay + 1) {
let firstTriggedAt = 0;
let timer = null;
return ((...args) => {
const currentTime = Date.now();
if (firstTriggedAt === 0) {
firstTriggedAt = currentTime;
}
if (timer) {
clearTimeout(timer);
}
const timeElapsed = currentTime - firstTriggedAt;
if (timeElapsed >= maxDelay) {
firstTriggedAt = 0;
func(...args);
}
else {
timer = setTimeout(() => {
firstTriggedAt = 0;
timer = null;
func(...args);
}, delay);
}
});
}