Comunidad de diseño web y desarrollo en internet

Detectar inactividad en una pelicula de Flash

Este sencillo código nos puede servir para detectar un tiempo de inactividad por parte del usuario dentro de nuestra película. Para por ejemplo, si el usuario está más de un minuto sin tocar el mouse, la película salte directamente a un fotograma con una animación y cuando el usuario vuelva a tocar el mouse la película vuelva a su estado normal. Algo como un salvapantallas.

Primero de todo crearemos una pelicula flash con dos fotogramas. En el primero colocaremos un MovieClip que contendrá toda la pelicula, y en el segundo colocaremos otro MovieClip que contendrá la animación de salvapantallas.

En las acciones del primer fotograma colocaremos el código que controlará si hay actividad por parte del usuario, en el momento en el que pase un cierto tiempo en el que no la hay, mandará la pelicula al segundo fotograma.

Código :

var posicionMouse:Number = _xmouse + _ymouse;
intervalo = setInterval(this, "controlaPosicion", 2000);
stop();

La variable posicionMouse guardará el valor de la posición del mouse en pantalla, y crearemos un intervalo que cada 2 segundos controle dicha posición.

Código :

function controlaPosicion():Void
{
    if (posicionMouse != _xmouse + _ymouse) {
    }
}

Esta función compara el valor de la variable posicionMouse (guardada hace 2 segundos) con el valor actual del mouse, si el valor es diferente con lo quiere decir el el usuario está activo, entonces ejecutaremos las siguientes acciones:

Código :

clearInterval(intervalo2);
intervalo2 = setInterval(this, "salvapantallas", 58000);
gotoAndStop(1);

Creamos un segundo intervalo, en este caso de 58 segundos (o el tiempo que queramos para que salte nuestro salvapantallas). Y colocamos un gotoAndStop que mantenga la pelicula en el primer fotograma.

¿Por qué eliminamos la referencia al intervalo antes de crearlo? porque de esta manera reseteamos el intervalo cada vez que ejecutamos la acción. Es decir: si cada 2 segundos comparamos los valores del mouse y son diferentes, reiniciamos el segundo intervalo haciendo que vuelva a empezar la cuenta desde cero con lo que nunca llegará a los 58 segundos y no ejecutará la acción "salvapantallas", En cambio en cuanto los valores del mouse coincidan por que no ha habido movimiento del ratón por parte del usuario este reinicio del intervalo no se ejecutará con lo que este si que llegará a los 58 segundos ejecutando la acción "salvapantallas".

Como última acción dentro de esta función colocaremos fuera del condicional, para que se ejecute siempre cada 2 segundos, una línea de código que nos actualice la variable de la posición del mouse.

Código :

posicionMouse = _xmouse + _ymouse;

La acción "salvapantallas" lo que hará es enviar la pelicula al segundo fotograma.

Código :

function salvapantallas():Void
{
    gotoAndStop(2);
}

Aun estando en el segundo fotograma el intervalo que comprueba el movimiento del mouse continua ejecutandose cada 2 segundos, con lo que al primer movimiento volverá a colocar la película en el primer fotograma.

Este sería el código completo, que iría en el primer fotograma:

Código :

function controlaPosicion():Void
{
    if (posicionMouse != _xmouse + _ymouse) {
        clearInterval(intervalo2);
        intervalo2 = setInterval(this, "salvapantallas", 58000);
        gotoAndStop(1);
    }
    posicionMouse = _xmouse + _ymouse;
}
//———————————-
function salvapantallas():Void
{
    gotoAndStop(2);
}
//—————————-
var posicionMouse:Number = _xmouse + _ymouse;
intervalo = setInterval(this, "controlaPosicion", 2000);
stop();

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate