Comunidad de diseño web y desarrollo en internet online

Dos acciones para un boton dependiendo del tiempo de pulsado

Citar            
MensajeEscrito el 19 Ago 2011 08:57 am
Buenos días a todos, y muchas gracias por vuestra ayuda, ahora mi pregunta como podría hacer que un mismo boton ejecute una acción si lo clicamos y otra acción distinta si lo mantenemos presionado un determinado tiempo??, estoy buscando por la web y lo mas parecido que he encontrado es un aporte fantástico de cristalab sobre "Captura múltiple de eventos con Actionscript 3", pero que no consigo adaptarlo para mi caso. gracias de nuevo.

Por gavidia

15 de clabLevel



 

msie8
Citar            
MensajeEscrito el 19 Ago 2011 01:09 pm
Creo que lo que necesitas es algo así:

Código ActionScript :

// Importamos las clases necesarias
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;

// Variable para cronometrar el tiempo
var tiempo:Timer = new Timer(300, 1);

// Variable para saber si se ha hecho un click largo
var clickLargo:Boolean;

// Esta función se ejecutará cuando se ha mantenido
//el botón pulsado durante un tiempo
function hacerClickLargo(e:TimerEvent):void {

   // Se indica que es un click largo
   clickLargo = true;

}

// Esta función se ejecutará cuando el ratón se presiona sobre el botón
function comienzoClick(e:MouseEvent):void {

   // Se indica que, en principio, no es un click largo
   clickLargo = false;

   // Añadimos el escuchador para saber cuando el click es largo
   tiempo.addEventListener(TimerEvent.TIMER, hacerClickLargo);

   // Iniciamos el cronómetro
   tiempo.start();

}

// Esta función se ejecutará cuando el ratón se suelta sobre el botón
function finClick(e:MouseEvent):void {

   // Dependiendo de si el click es largo o no,
   // se ejecutará una acción u otra
   if(clickLargo){
      trace("Has hecho un click largo.");
   }else{
      trace("Has hecho un click normal.");
   }

   // Reiniciamos y paramos el cronómetro
   tiempo.reset();

}

// Añadimos los escuchadores para detectar los clicks sobre el botón
boton.addEventListener(MouseEvent.MOUSE_DOWN, comienzoClick);
boton.addEventListener(MouseEvent.MOUSE_UP, finClick);


Sería mucho mejor si todo ese código se metiese dentro de una clase, pero eso lo dejo a tu elección :)

Por nestorrente

1010 de clabLevel

10 tutoriales

 

Vigo

firefox
Citar            
MensajeEscrito el 19 Ago 2011 01:10 pm
Por cierto, sobra decir que, si quieres cambiar el tiempo para detectar el click largo, sólo tienes que cambiar esta linea:

Código ActionScript :

var tiempo:Timer = new Timer(300, 1);


Y cambiar 300 por el número que tú quieras.

Por nestorrente

1010 de clabLevel

10 tutoriales

 

Vigo

firefox
Citar            
MensajeEscrito el 22 Ago 2011 06:15 am
Muchas gracias, nestorrente eso es lo que necesito, ya estaba desesperado de no conseguirlo, de nuevo muchas gracias.

Por gavidia

15 de clabLevel



 

msie8
Citar            
MensajeEscrito el 22 Ago 2011 07:15 am
Hola otra vez, soy bastante patán con esto de la programación.

Como podría adaptarlo para que las acciones se ejecuten cuando tienes presionado el botón?

Las dos acciones se realizan con el botón pulsado (MOUSE_DOWN). Lo único que tenemos para diferenciarlas es el tiempo que se mantiene pulsado. Cuando pongo dos eventos iguales solo me coge el primero.

Muchas gracias.

Por gavidia

15 de clabLevel



 

msie8
Citar            
MensajeEscrito el 22 Ago 2011 09:47 am
Te refieres a que se ejecuten antes de que levantes el dedo del ratón?

Por nestorrente

1010 de clabLevel

10 tutoriales

 

Vigo

firefox
Citar            
MensajeEscrito el 22 Ago 2011 12:08 pm
Hola nestorrente, si eso es, como la tecla de apagado de un teléfono movil, si le das una vez entras en un menu o cuelgas la llamada, y si la dejas pulsada se apaga.

Perdona por tardar tanto en contestarte.

Gracias.

Por gavidia

15 de clabLevel



 

msie8
Citar            
MensajeEscrito el 22 Ago 2011 01:05 pm
Es fácil, sólo tienes que meter el código en la función hacerClickLargo, y ese código se ejecutará cuando haya transcurrido el tiempo de los clicks largos. Te pongo un ejemplo para que lo veas claro :)

Código ActionScript :

// Importamos las clases necesarias
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;

// Variable para cronometrar el tiempo
var tiempo:Timer = new Timer(300, 1);

// Variable para saber si se ha hecho un click largo
var clickLargo:Boolean;

// Esta función se ejecutará cuando se ha mantenido
//el botón pulsado durante un tiempo
function hacerClickLargo(e:TimerEvent):void {

   // Se indica que es un click largo
   clickLargo = true;

   // Se realizan las acciones de un click largo
   trace("Has hecho un click largo.");

}

// Esta función se ejecutará cuando el ratón se presiona sobre el botón
function comienzoClick(e:MouseEvent):void {

   // Se indica que, en principio, no es un click largo
   clickLargo = false;

   // Añadimos el escuchador para saber cuando el click es largo
   tiempo.addEventListener(TimerEvent.TIMER, hacerClickLargo);

   // Iniciamos el cronómetro
   tiempo.start();

}

// Esta función se ejecutará cuando el ratón se suelta sobre el botón
function finClick(e:MouseEvent):void {

   // Si el click no es largo, se ejecutarán las acciones de un click normal
   if(!clickLargo){
      trace("Has hecho un click normal.");
   }

   // Reiniciamos y paramos el cronómetro
   tiempo.reset();

}

// Añadimos los escuchadores para detectar los clicks sobre el botón
boton.addEventListener(MouseEvent.MOUSE_DOWN, comienzoClick);
boton.addEventListener(MouseEvent.MOUSE_UP, finClick);

Por nestorrente

1010 de clabLevel

10 tutoriales

 

Vigo

firefox
Citar            
MensajeEscrito el 22 Ago 2011 06:05 pm
Gracias otra vez nestorrente, no hay nada como el saber.

Por gavidia

15 de clabLevel



 

opera

 

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