L'articolo Delaying Javascript Event Execution apparso sul blog Matt's 411 è un ottimo spunto per capire quali effetti possiamo ottenere interagendo con Javascript al livello dell'applicazione. Vediamo il seguente script creato da Matt:
var onFooEndFunc = function() { var delay = 50; /* milliseconds - vary as desired */ var executionTimer; return function() { if (executionTimer) { clearTimeout(executionTimer); } executionTimer = setTimeout(function() { // YOUR CODE HERE }, delay); }; }();
Esso consente di creare degli "eventi personalizzati" che si basano su altri eventi esistenti, ma che vengono eseguiti al completamento di questi ultimi. Ovviamente dobbiamo metterci del nostro: la funzione personalizzata che viene chiamata dopo un determinato lasso di tempo ed il ritardo in ms ad esempio.
Nell'articolo troviamo 3 interessanti demo che utilizzano questa tecnica per creare altrettanti eventi custom: onScrollEnd (simula il completamento dello scrolling), onMouseMoveEnd (simula il completamento dell'azione di movimento del mouse) ed onResizeEnd (simula il completamento dell'azione di ridimensionamento della finestra).
Il funzionamento è semplice: basta applicare questa funzione all'evento di cui si vuole tracciare il completamento, ed impostare il corpo della funzione restituita a seconda dell'operazione che vogliamo compiere. Nel caso dello scrolling l'autore ha inserito:
executionTimer = setTimeout(function() { $("onScrollEndDemoDiv").set("text", "Executed " + (++count) + " times."); }, delay);
in modo da tracciare il numero di scrolling "effettivi" realizzati dall'utente.