Atrasa a execução de uma função até que o usuário pare de chamar por N milissegundos.
/**
* @param {Function} fn - Função a ser executada
* @param {number} delay - Atraso em ms (padrão: 300)
*/
function debounce(fn, delay = 300) {
let timer;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => fn.apply(this, args), delay);
};
}
// Uso:
const onSearch = debounce((e) => {
console.log('Buscando:', e.target.value);
}, 400);
document.getElementById('busca').addEventListener('input', onSearch);