Le azioni ripetute in JavaScript possono creare problemi quando vengono associate ad eventi continui.
Possiamo definire la seguente funzione:
function debounce( func, wait, immediate ) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if ( !immediate ) {
func.apply( context, args );
}
};
var callNow = immediate && !timeout;
clearTimeout( timeout );
timeout = setTimeout( later, wait );
if ( callNow ) {
func.apply( context, args );
}
};
};
Esempio d'uso con l'evento scroll
:
$( window ).on( "scroll", function() {
debounce(function() {
//...
}, 250);
});