Debounce in Javascript
Supponiamo di avere un bottone che invia i dati di un form, e che vogliamo impedire che l'utente ci clicchi troppe volte in maniera consecutiva.
In Javascript abbiamo almeno due possibilità:
- bloccare la UI fino a che l'operazione non è terminata
- usare il debounce
In questo articolo vediamo un esempio di questa "tecnica".
Ecco un esempio:
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<title>TEST</title>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<style></style>
<script>
function debounce(func, timeout = 3000) {
let timer;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this, args);
}, timeout);
};
}
function invia() {
console.log('Invvio dati!');
}
const eseguiDebounce = debounce(() => invia());
</script>
</head>
<body>
<button onclick="eseguiDebounce()">Invia</button>
</body>
</html>
Se provate a cliccare ripetutamente sul bottone, vedrete che il risultato apparirà in console una sola volta.
Più facile vederlo in azione che spiegarlo.
Ovviamente eseguiDebounce potete richiamarlo dove volete: su una input, in caricamento pagina, sullo scroll della pagina, ecc.
Enjoy!
javascript debounce
Commentami!