2011-10-08 22 views
11

¿Es posible hacer algo como esto:Marque si mousedown con una instrucción if?

if ($(this).mousedown() == true) { 

pensé que iba a funcionar pero no es así.

detalles adicionales: Estoy tratando de comprobar si el botón del ratón está presionado cuando el ratón sale de una específica DIV, por lo que si la persona está sosteniendo el botón del ratón mientras el puntero del ratón sale de la div, hacer esto, de lo contrario Haz eso.

+0

¿Quieres saber si el botón izquierdo del ratón está sobre un elemento, o si se ha pulsado en cualquier lugar de la página? – Ben

+0

¿Estás tratando de determinar qué evento ha disparado una función/método? –

+0

Pregunta actualizada, sí, botón izquierdo en el div. –

Respuesta

19

La forma más sencilla que puedo pensar es para unir mousedown y mouseup detectores de eventos al document y actualizar una variable global en consecuencia. En el evento mouseout de su elemento, puede verificar el estado de esa variable y actuar según corresponda. (Nota: esto supone que no le importa si presionó o no el mouse mientras estaba sobre el div o no ... tendrá que aclarar su pregunta al respecto).

var down = false; 
$(document).mousedown(function() { 
    down = true; 
}).mouseup(function() { 
    down = false; 
}); 
$("#example").mouseout(function() { 
    if(down) { 
     console.log("down"); 
    } 
    else { 
     console.log("up"); 
    } 
}); 

Aquí hay un working example de los de arriba.

+0

¿Sería problemático usar '$ .data()' para adjuntar la variable 'down' al elemento' # example'? –

+0

No, para nada problemático. Buen pensamiento, para evitar el uso de una variable global. –

+0

Estoy pensando si esto tiene que estar en más de un elemento, por ejemplo. Lo único en lo que estaba pensando era en la velocidad. –

1

http://jsfiddle.net/5HrWF/

algo como esto?

Código:

<!DOCTYPE html> 
<html> 
<head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 
<body> 
    <p>Press mouse and release here.</p> 

<script> 
    $("p").mouseup(function(){ 
     $(this).append('<span style="color:#F00;">Mouse up.</span>'); 
    }).mousedown(function(){ 
     $(this).append('<span style="color:#00F;">Mouse down.</span>'); 
    }); 

</script> 

</body> 
</html> 
0

Muy bien, así la mejor opción que puedo darle es la siguiente: http://jsfiddle.net/qK8rr/2/

+0

Esto va a sonar como un disco roto, pero publique su código actual en la respuesta (esto se considera la mejor práctica en SO). ':)' –

5

responder a su pregunta original, si esto es posible. Cuando el evento mousedown se dispara sobre un elemento, el elemento se activa y es seleccionable por el pseudo selector: activo. En jQuery si no se selecciona nada, se devuelve una matriz vacía, podemos usar esto para nuestra ventaja en combinación con la propiedad .length array y convertir el pseudo selector activo en una comprobación para ver si el mouse está sobre un elemento particular o no por lo que:

if ($('#id:active').length) { 
    //do something 
} 

Comprobación de si el ratón era abajo sobre un elemento en particular en un punto dado en el tiempo es un evento diferente y no va con el título de esta pregunta y debe cambiarse podría añadir. Google me trajo aquí y esta respuesta es para aquellos que inevitablemente seguirán.

0

Echa un vistazo a este. http://jsfiddle.net/b1Lzo60n/

Mousedown inicia un temporizador que comprueba si el mouse aún está apagado después de 1 segundo.

<button id="button">Press me</button> 
<div id="log"></div> 

Código:

var mousedown = false; 
var mousedown_timer = ''; 
$('#button').mousedown(function(e) { 
    mousedown = true; 
    $('#log').text('mousedown...'); 
    mousedown_timer = setTimeout(function() { 
     if(mousedown) { 
      $('#log').text('1 second'); 
     } 
    }, 1000); 
}).mouseup(function(e) { 
    mousedown = false; 
    clearTimeout(mousedown_timer); 
    $('#log').text('aborted'); 
}); 
Cuestiones relacionadas