Foros del Web » Programando para Internet » Javascript »

Detectar mouse despues de 2 segundos de apretado el clic izq

Estas en el tema de Detectar mouse despues de 2 segundos de apretado el clic izq en el foro de Javascript en Foros del Web. Hola a todos. Como detectar el mouse despues de 2 segundos de apretado el clic izq y ejecutar una funcion de JS. Gracias!!!...
  #1 (permalink)  
Antiguo 26/02/2009, 13:01
Avatar de MauricioCr  
Fecha de Ingreso: junio-2007
Ubicación: San Pedro, San Jose, Costa Rica, Costa Rica
Mensajes: 67
Antigüedad: 16 años, 10 meses
Puntos: 0
Detectar mouse despues de 2 segundos de apretado el clic izq

Hola a todos.

Como detectar el mouse despues de 2 segundos de apretado el clic izq y ejecutar una funcion de JS.

Gracias!!!
  #2 (permalink)  
Antiguo 26/02/2009, 13:43
Avatar de jeybi  
Fecha de Ingreso: julio-2008
Ubicación: Mexico
Mensajes: 130
Antigüedad: 15 años, 9 meses
Puntos: 10
Respuesta: Detectar mouse despues de 2 segundos de apretado el clic izq

Código javascript:
Ver original
  1. function wait(tiempo,funcion){
  2.     setTimeout(funcion,tiempo*1000);
  3. }
  4.  
  5. function funcionX(){
  6.     alert('oK');    
  7. }

Ejemplo de uso:

Código HTML:
<input type="button" onclick="wait(2,funcionX)" value="Clickeame"  /> 
Descripcion:wait recibe 2 parametros, tiempo y funcion. Tiempo define el tiempo en segundos, ejemplo: 1, 2, 10, etc. Funcion define la funcion que se desea ejecutar despues de X Tiempo, puedes ser cualquier funcion definida.

Puedes hacerlo solo con setTimeOut, pero queda mas limpio si usas esta pequeña funcion.
  #3 (permalink)  
Antiguo 26/02/2009, 14:07
Avatar de MauricioCr  
Fecha de Ingreso: junio-2007
Ubicación: San Pedro, San Jose, Costa Rica, Costa Rica
Mensajes: 67
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Detectar mouse despues de 2 segundos de apretado el clic izq

Gracias Jeybi por su codigo.

El problema es que no es al dar clic que llame la funcion, sino mas bien despues de haber presionado el clic durante 2 s
  #4 (permalink)  
Antiguo 26/02/2009, 14:52
Avatar de jeybi  
Fecha de Ingreso: julio-2008
Ubicación: Mexico
Mensajes: 130
Antigüedad: 15 años, 9 meses
Puntos: 10
Respuesta: Detectar mouse despues de 2 segundos de apretado el clic izq

Ok, pues pudiste especificarlo :):

Puedes usar esta funcion con window.onload o asignando los eventos directamente en el elemento que quieres que se comporte como dices:

Código javascript:
Ver original
  1. window.onload = function(){
  2.     document.getElementById('mantener').onmousedown = esperar;
  3.     document.getElementById('mantener').onmouseup = cancelar;
  4. }
  5.  
  6. function esperar() {
  7.     esperar.tiempo = setTimeout(tuFuncion, 2000);
  8. }
  9.  
  10. function cancelar() {
  11.     clearTimeout(esperar.tiempo);
  12. }
  13.  
  14. function tuFuncion(){
  15.     alert('Lo lograste!');
  16.    
  17. }

Ejemplo:

Código HTML:
<div id="mantener" style="width:400px; height:400px; border:1px solid red;"> Esto es un div cualquiera, al mantener el mouse por 2 segundos presionado saldra un mensaje </div> 
  #5 (permalink)  
Antiguo 26/02/2009, 16:21
Avatar de MauricioCr  
Fecha de Ingreso: junio-2007
Ubicación: San Pedro, San Jose, Costa Rica, Costa Rica
Mensajes: 67
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Detectar mouse despues de 2 segundos de apretado el clic izq

jeybi, un millon de gracias.

Que hariamos sin personas como ud que estan anuentes a ayudar. ;)

Gracias
  #6 (permalink)  
Antiguo 26/02/2009, 18:00
Avatar de MauricioCr  
Fecha de Ingreso: junio-2007
Ubicación: San Pedro, San Jose, Costa Rica, Costa Rica
Mensajes: 67
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Detectar mouse despues de 2 segundos de apretado el clic izq

Ahora me topo con un problema que llevo tratando de solucionarlo pero no puedo.

Me da este error:
Código:
Error: useless setTimeout call (missing quotes around argument?)
Archivo de origen: file:///C:/Documents%20and%20Settings/Administrador/Escritorio/index.htm
Línea: 12
Y al soltar el clic cambia el valor del input

Código javascript:
Ver original
  1. function editar(id){
  2.     document.getElementById(id).onmousedown = esperar('i'+id);
  3.     document.getElementById(id).onmouseup = cancelar;
  4. }
  5. function esperar(id) {
  6.     esperar.tiempo = setTimeout(tuFuncion(id), 2000);
  7. }
  8.  
  9. function cancelar() {
  10.     clearTimeout(esperar.tiempo);
  11. }
  12.  
  13. function tuFuncion(id){
  14.     document.getElementById(id).value = "Otro valor";
  15. }

Código HTML:
<div id="1" style="width:400px; height:60px; border:1px solid red;" onclick="editar('1')"> Esto es un div cualquiera, al mantener el mouse por 2 segundos presionado saldra un mensaje </div>
<input id="i1" type="text" size="20" value="aaaaa"> 
Muchas gracias si me dice que error estoy cometiendo.
  #7 (permalink)  
Antiguo 26/02/2009, 19:04
Avatar de jeybi  
Fecha de Ingreso: julio-2008
Ubicación: Mexico
Mensajes: 130
Antigüedad: 15 años, 9 meses
Puntos: 10
Respuesta: Detectar mouse despues de 2 segundos de apretado el clic izq

Ok, lo que pasa es:

1.al acer clik llamas a editar(1)

2.la funcion editar intenta asignar funciones a los eventos onmousedown y onmouseup, cosa que no puede porque cuando es llamada, el click ya se termino

3.al dar click en el div, intentas llamar a: setTimeout(tuFuncion(id), 2000), cosa que no resulta porque para pasar parametros tienes enviarl el primer argumento como una string

4.el codigo falla por que settimeout no reconoce tuFuncion(id), cuando deberia ser 'tuFuncion("'+id+'")' por ejemplo.

Aqui tienes este trozo de codigo, estudialo y dime si te va:
Código javascript:
Ver original
  1. //Esta funcion recibe 2 argumentos, evento que es el evento por el cual fue llamada (onmouseup, onmousedown) e id, que es la id que le pasas
  2. function esperar(evento, id){
  3.     evento = window.event || evento; //Compatibilidad con IE para reconocer el evento
  4.        
  5.     if(evento.type == 'mousedown'){   //Si el evento es onmousedown entonces...
  6.         var funcion = 'editar("i'+id+'")';     //Creamos un string con la funcion editar mas el parametro id
  7.         esperar.tiempo = setTimeout(funcion, 2000);   //Llamamos a settimeout de la manera correcta
  8.     }    
  9.     else if(evento.type == 'mouseup'){   //Si el usuario suelta el click antes de tiempo...
  10.         clearTimeout(esperar.tiempo);   //Cancelamos la llamada a a editar
  11.     }
  12.            
  13. }
  14.  
  15. //Justo como la tenias
  16. function editar(id){
  17.     document.getElementById(id).value = "Ready!";  
  18. }

El HTML:

Código HTML:
<div id="1" style="width:400px; height:60px; border:1px solid red;" onmouseup="esperar(event, 1)" onmousedown="esperar(event, 1)"> Esto es un div cualquiera, al mantener el mouse por 2 segundos presionado saldra un mensaje </div> 
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 03:43.