UNPKG

@cch137/format-utils

Version:

A collection of utility modules for formatting and processing data

60 lines (59 loc) 1.64 kB
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); } }); }