Comunidad de diseño web y desarrollo en internet online

Desaparecer un botón por no mover el mouse

Citar            
MensajeEscrito el 26 Ene 2007 06:29 pm
Estoy intentando hacer que un botón desaparesca en caso de que no se haya movido el mouse durante 3 segundos.
Este es lo que tengo por el momento:

Código :

var mouseListener:Object=new Object();
mouseListener.onMouseMove=function(){
   var movimientoIntr:Number=setInterval(hayMovimientoMouse,20);
}
Mouse.addListener(mouseListener);

function hayMovimientoMouse():Void{
   tiempoFullscreen++;
   if(tiempoFullscreen<3000){
      bFullscreen._visible=true;
      trace(tiempoFullscreen);
   }
   else{
      bFullscreen._visible=false;
      tiempoFullscreen=0;
      trace(0);      
                 //este clearInterval no me está funcionando
      clearInterval(movimientoIntr); 
      break;
   }
}


Dónde la regué? :crap:

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 26 Ene 2007 07:55 pm
bien , no tengo flash a la mano (bueno la verdad si pero me da pereza ir a abrirlo)
lo del clear interval
actualmente tienes esto

Código :

var movimientoIntr:Number=setInterval(hayMovimientoMouse,20); 

ya me ha dado problemas usandolo de esta forma asi que prueba simplemente poner esto:

Código :

movimientoIntr=setInterval(hayMovimientoMouse,20); 

Por eveevans

Claber

450 de clabLevel

3 tutoriales

 

Nicaragua

firefox
Citar            
MensajeEscrito el 26 Ene 2007 08:54 pm
Negativo eveenans, tampoco funcionó. Thanks.
No le encuentro todavía.

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Ene 2007 06:21 am
si, pero ahora sirve el clear interval , no?
bueno , mañana voy a revisar el code y hacerlo funcionar OK

Por eveevans

Claber

450 de clabLevel

3 tutoriales

 

Nicaragua

firefox
Citar            
MensajeEscrito el 27 Ene 2007 10:42 am
i porke no usas simplemente la classe Date i el metodo getTime()¿?

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 27 Ene 2007 04:22 pm
No he probado con el getTime, vamos a ver , porque sigue sin funcionar el clearInterval.

Por cierto eveevans, buen tuto para mover personajes tipo RPG :D !

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Ene 2007 06:52 pm
Gracias por la sugerencia ferranpujol, funcionó en verdad.

:lol:

Así fué como lo implementé:

Código :

//inicialización de variables para tomar el tiempo
var timeDate:Date=new Date();
var time:Number;
time=timeDate.getTime();
trace("time inicial ="+time);
var timeActual:Number; 
timeActual=time;
...

//movie clip que recibirá el onEnterFrame  (puede ser el _root también)
mAreaFullscreen.onEnterFrame=function(){
  var timeDate:Date=new Date();
  var time:Number;
  time=timeDate.getTime();
  trace(time);
  timeDiff=time-_root.timeActual;
  
  if(timeDiff<3000){
       bFullscreen._visible=true;
  }
  else{
       bFullscreen._visible=false;     
  }
}

...
var mouseListener:Object=new Object();
mouseListener.onMouseMove=function(){
     var timeActualDate:Date=new Date();
     _root.timeActual=timeActualDate.getTime();
}
Mouse.addListener(mouseListener);
....

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Ene 2007 06:53 pm
Pero sí me gustaría saber si es posible hacerlo como inicialmente los formulé.

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Ene 2007 11:49 pm
Hola amigo Rafeo, mira, estube analizando el primer codigo que pusiste:

Código :

var mouseListener:Object=new Object();
mouseListener.onMouseMove=function(){
   var movimientoIntr:Number=setInterval(hayMovimientoMouse,20);
}
Mouse.addListener(mouseListener);

function hayMovimientoMouse():Void{
   tiempoFullscreen++;
   if(tiempoFullscreen<3000){
      bFullscreen._visible=true;
      trace(tiempoFullscreen);
   }
   else{
      bFullscreen._visible=false;
      tiempoFullscreen=0;
      trace(0);      
                 //este clearInterval no me está funcionando
      clearInterval(movimientoIntr); 
      break;
   }
}


El principal problema de por que tu clearInterval no funciona es porque definiste el id movimientoIntr dentro de la funcion que se invoca al mover el mouse, por lo que esta variable seria local de esta funcion, puedes comprobar esto traceandola debajo donde la utilizas para el clearInterval, una solucion seria definirla fuera u otra podria ser pasarla como parametro del setInterval.

Ahora, solucionado esto, el resto deberia funcionar (solo que no a los 3s como quieres, porque estas llamando la funcion hayMovimientoMouse cada 20 milisegundos e incrementas entonces a tiempoFullscreen en 1, esto quiere decir que pasados 3 segundos tiempoFullscreen valdra 150 y no 3000 como deberia ser, esto quiere decir que no seria hasta pasado 1 minuto completo que haria lo que deberia hacer a los 3 segundos), yo probe esto y no funciono, pero al poner un trace dentro de la funcion que se llama al mover el mouse, me di cuenta de que no se porque al ejecutar la pelicula (almenos en el flash, no la probe en el flashplayer) esta funcion se invoca dos veces seguidas, y por supuesto que el id del setInterval que queda almacenado en la variable movimientoIntr es el de la segunda llamada, el cual si se detiene al llamar debajo a clearInterval (despues de corregido lo de la definicion del id) solo que la primera llamada es quien se queda activa y no se puede eliminar ya que no conoces el id, esto se soluciona llamando a clearInterval justo antes de llamar a setInterval en la funcion que se invoca al mover el mouse, para asi estar seguro de que se detiene el intervalo llamado anteriormente antes de crear uno nuevo.

Aqui te dejo un ejemplito que hice a partir del codigo que tu publicaste

Código :

var mouseListener:Object = new Object();
var movimientoIntr:Number = new Number();    //definir la var para almacenar el id fuera, para que sea visible a las dos funciones.
mouseListener.onMouseMove = function() {
   trace("movement");    //es para que veas cuantas veces se llama a esta funcion (no se porque 2 veces al compilar)
   clearInterval(movimientoIntr);    //solucion a esa doble llamada inicial
   bFullscreen._visible = true;    //esto es para visualizar el boton otra vez al mover el mouse nuevamente
   movimientoIntr = setInterval(hayMovimientoMouse, 3000);    //llamada a la funcion "hayMovimientoMouse" cada 3 segundos.
};
Mouse.addListener(mouseListener);
//
function hayMovimientoMouse():Void { 
//si se ejecuta esta funcion es porque han pasado 3 segundos sin mover el mouse, ya que de moverlo antes de los 3 segundos se eliminaria el intervalo y se iniciaria uno nuevo al llamar la funcion de arriba.
   trace("3 seconds without moving the mouse");
   bFullscreen._visible = false;
   clearInterval(movimientoIntr);
}


Espero haberte servido de ayuda.

Saludos. :wink:

Por pcreide

25 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 28 Ene 2007 05:47 am
ahahaha :shock:
parace que ya le dieron solucion, --..... y yo que queria hacerlo , pero bueno , de igual , interesante lo que estas haciendo :wink:

ah por cierto , gracias por lo del Tuto de mover personajes tipo RPG!! :love:

Por eveevans

Claber

450 de clabLevel

3 tutoriales

 

Nicaragua

firefox
Citar            
MensajeEscrito el 29 Ene 2007 03:53 pm
Excelentísimo lo que hiciste pcreide, justo lo que quería hacer!!

Muchas gracias, la verdad que la "regué" feo al no declarar la variable del setInterval fuera del onMouseMove, y lo de llamar la función cada 20 milisegundos en vez y utilizar un contador además,jejejeje :lol: .

Mil gracias a todos ustedes, ya no se me olvidará ... espero :lol:

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.