Intercettare Inattività dell’USER

- Letture: 2.398

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

Stratega, Docente, Speaker con più di 12 anni di esperienza in strategie creative multicanale. Oggi sono Managing Partner di ThinkingHat, Innovation Studio specializzato in tecnologie emergenti per aziende e brand audaci.

14 Commenti

  1. .: DoC :.

    Ciao Julius mi chiedevo una cosa… al posto di far comparire la scritta “USER ATTIVO ” è possibile far caricare un swf esterno? se si come faccio ad inserirlo?

    Grazie mille

  2. Nel codice che ho inserito nell’articolo a linea 48 vedrai /* Metodi USER attivo*/ li devi inserire le azioni da compiere quando l’use è attivo userai il loadMovie per caricare un swf esterno

  3. .: DoC :.

    ok perciò dopo: /* Metodi USER attivo*/ metto

    loadMovie(“xxx.swf”,”xxx”);

    oppure lo devo mettere dopo :

    /* Metodi USER attivo*/
    private function setIdleInterval() {
    loadMovie(“xxx.swf”,”xxx”);
    }

    ciao ciao e scusa se ti faccio perdere tempo :)

  4. .: DoC :.

    Perfetto!!!!! SEI UN MITO! :) :) :)

    non so proprio come ringraziarti!

    sei meglio di una guida… a furia di leggere commenti sto cominciando a capire come funziona flash!

    Ciao ciao

  5. .: DoC :.

    dimenticavo , solo un ultima piccola cosa… come mai nel pannello degli errori mi compare una scritta “false” anche se l’animazione funziona alla perfezione?

    Grazie mille

  6. Non è un problema quella scritta, la vedi solo in progettazione..

    se poi ti da tanto fastidio cerca un “trace” nel codice

  7. Complimenti, era proprio ciò che stavo cercando, ma sapete come si può fare in php? Sapete se si può fare? Avete dei suggerimenti?
    Grazie

  8. Ciao Julius
    una domanda da neofita… ma se io ho nel file di flash in cui applico il codice che hai scritto una versione italiana e una versione in inglese e necessito far si che in caso di interattività dell’utente mi vada su uno standby in italiano o uno in inglese a seconda di quale versione (italiana o inglese) l’utente stia consultanto all’interno del file flash, come faccio?

  9. SI l’ho provato ma va sempre allo stesso punto della timeline… invece se l’utente sta consultando la versione italiana dovrebbe finire in uno standby con un messaggio in italiano mentre se consulta la parte in inglese dovrebbe finire in un messaggio di standby in inglese… questo non capisco come fare

  10. @ Giuliano Ambrosio:
    SI l’ho provato ma va sempre allo stesso punto della timeline… invece se l’utente sta consultando la versione italiana dovrebbe finire in uno standby con un messaggio in italiano mentre se consulta la parte in inglese dovrebbe finire in un messaggio di standby in inglese… questo non capisco come fare

Commenti