Foros del Web » Programando para Internet » Javascript »

botones con tiempo... alguna solucion?

Estas en el tema de botones con tiempo... alguna solucion? en el foro de Javascript en Foros del Web. HOla a todos ... tengo un problemilla y es el siguiente : veran estoy usando el siguiente codigo Script Código PHP: < script type = "text/javascript" ...
  #1 (permalink)  
Antiguo 15/07/2014, 15:54
 
Fecha de Ingreso: mayo-2010
Mensajes: 215
Antigüedad: 14 años
Puntos: 4
Pregunta botones con tiempo... alguna solucion?

HOla a todos ... tengo un problemilla y es el siguiente :

veran estoy usando el siguiente codigo Script

Código PHP:
<script type="text/javascript">
function 
handleArrowKeys(evt) {
evt = (evt) ? evt : ((window.event) ? event null);
if (
evt) {
switch (
evt.keyCode) {
case 
37
izquierda();
break;    
case 
38:
arriba();
break;    
case 
39:
derecha();
break;    
case 
40:
abajo();
break;    
}}}  
document.onkeyup handleArrowKeys;
</script> 
lo que hace, es activar la funcion al presionar los botones del teclado (arriba,abajo,izquierda,derecha) hasta ahi todo perfecto, pero quisiera cambiar un detalle de ello, y es que cuando presione un boton ... quiero que se espere 2 segundos, para que de nuevo funcione el presionar el boton ...

en otras palabras quiero evitar que se presionen seguidamente ... que haya un pause de 2 segundos, 2 en 2 ...

espero puedan ayudarme, gracias.
  #2 (permalink)  
Antiguo 15/07/2014, 17:30
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: botones con tiempo... alguna solucion?

Yo lo haría así:

Código Javascript:
Ver original
  1. var control = true,
  2.     fn = function(message){
  3.         if (!control)
  4.             setTimeout(function(){
  5.                 console.log(message);
  6.             }, 2000);
  7.         else
  8.             console.log(message);
  9.         control = false;
  10.     };
  11.  
  12. document.addEventListener("keyup", function(e){
  13.     var key = event.keyUp|| event.which;
  14.  
  15.     switch (key){
  16.         case 37:
  17.             fn("Izquierda");
  18.         break;
  19.        
  20.         case 38:
  21.             fn("Arriba");
  22.         break;
  23.        
  24.         case 39:
  25.             fn("Derecha");          
  26.         break;
  27.        
  28.         case 40:
  29.             fn("Abajo");            
  30.         break;
  31.     }
  32. }, false);

Primero, defino una variable con la cual llevaré un control para obtener lo que buscas y que iniciará con el valor booleano false. Una vez que pulsemos una tecla, obtengo el código de ésta y según corresponda al valor de cualquiera de las teclas de dirección (las flechas), ejecuto una función a la cual le paso el nombre de la dirección como argumento, pero tú puedes ejecutar cualquier otra función en su lugar.

En esta función, evalúo el valor de la variable control; si su valor es false, muestro el mensaje con el nombre de la dirección luego de 2000 milésimas de segundo que equivalen a dos segundos, caso contrario, muestro inmediatamente el mensaje y cambio el valor de control a false. Como el valor inicial de esta variable es true, la primera vez que se pulse una tecla direccional, el mensaje se mostrará inmediatamente y cambiará el valor de control a false y para las siguientes veces, retraso la muestra del mensaje utilizando el método setTimeout, el cual ejecuta una función después de un tiempo determinado, que en este caso son 2000 milésimas de segundo.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 15/07/2014 a las 17:54 Razón: Corrección

Etiquetas: alguna, botones, funcion, tiempo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:29.