Oggi vedremo come intercettare l’inattività dell’User qualora non dia più segni di attività.

Con una semplice classe potremo tenere sotto controllo i movimenti del mouse dell’User, in questo modo potremo gestire le varie azioni da compiere.

Queste sono le linee di codice da inserire nel progetto .fla sul primo fotogramma

// Inserire il tempo di attesa 1000 equivale a un secondo di inattività
var idleWatcher = new IdleUserWatcher(2000);
// Registro un oggetto per ricevere la notifica su onUserIdle()
idleWatcher.addListener(_root);
//Avremo un ritorno quando verrà avviata l'inattività dell user
trace(idleWatcher.isActive);
function onUserIdle() {
trace("User inattivo!");
}

Ecco la classe IdleUserWatche.as

class IdleUserWatcher {
//L'user è attivo?
private var __isActive:Boolean = false;
// ID interval
private var intervalID:Number;
// Quanto tempo aspettare prima di chiamare USER "inattivo"
private var idleTime:Number = 1000;
// Lista degli oggetti listening
private var listeners:Array;
// Solo se è attivo
public function get isActive():Boolean {
return __isActive;
}
public function IdleUserWatcher(idleTime:Number) {
if (idleTime != undefined) {
this.idleTime = idleTime;
}
Mouse.addListener(this);
Key.addListener(this);
listeners = new Array();
}
/* Aggiungi Listener alle liste listener */
public function addListener(listener:Object):Boolean {
for (var i:Number = 0; i<listeners.length; i++) {
if (listeners[i] == listener) {
return false;
}
}
listeners.push(listener);
return true;
}
/* Rimuovi Listener alle liste listener */
public function removeListener(listener:Object):Boolean {
for (var i:Number = 0; i<listeners.length; i++) {
if (listeners[i] == listener) {
listeners.splice(i, 1);
return true;
}
}
return false;
}
/* Eventi */
private function onKeyDown():Void {
setIdleInterval();
}
private function onMouseMove():Void {
setIdleInterval();
}
/* Metodi USER attivo*/
private function setIdleInterval() {
trace("User attivo!");
this.__isActive = true;
clearInterval(this.intervalID);
this.intervalID = setInterval(this, "broadcastIdle", this.idleTime, this);
}
private function broadcastIdle(watcher:IdleUserWatcher):Void {
watcher.__isActive = false;
for (var i:Number = 0; i<listeners.length; i++) {
listeners[i].onUserIdle();
}
clearInterval(watcher.intervalID);
}
}

Scarica il sorgente
Guarda il Tutorial

Autore: Giuliano Ambrosio

Giuliano Ambrosio è un Web Designer Freelance di Torino che ama la grafica e sperimentare tecniche di creatività sul web. Grazie all'esperienza maturata nel campo del web design potrai scoprire i servizi disponibili, oppure guardare i suoi ultimi lavori.