2011-10-08 13 views
11

E 'possibile fare qualcosa del genere:Verificare se il mouse è con una dichiarazione if?

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

ho pensato che avrebbe funzionato, ma non è così.

Dettagli aggiuntivi: Sto cercando di verificare se il pulsante del mouse è premuto quando il mouse lascia una specifica DIV, quindi se la persona sta tenendo il pulsante del mouse mentre il mouse lascia il div, fare questo, altrimenti Fai quello.

+0

Vuoi sapere se il tasto sinistro del mouse è premuto su un elemento, o se semplicemente premuto in qualsiasi punto della pagina? – Ben

+0

Stai provando a determinare quale evento ha attivato una funzione/metodo? –

+0

Domanda aggiornata, sì tasto sinistro giù sul div. –

risposta

19

Il modo più semplice che posso pensare è quello di legare mousedown e mouseup listener di eventi al document e aggiornare una variabile globale di conseguenza. Nell'evento mouseout del tuo elemento puoi controllare lo stato di quella variabile e agire come appropriato. (Nota: questo presuppone che non ti importa se il mouse è stato premuto o meno sopra il div o meno ... dovrai chiarire la tua domanda in merito).

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

Ecco uno working example di quanto sopra.

+0

Sarebbe problematico usare '$ .data()' per collegare la variabile 'down' all'elemento' # esempio'? –

+0

No, non è affatto problematico. Buon pensiero, per evitare l'uso di una variabile globale. –

+0

Sto pensando se questo deve essere su più di un elemento, per esempio. L'unica cosa a cui stavo pensando era la velocità. –

1

http://jsfiddle.net/5HrWF/

qualcosa di simile?

Codice:

<!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

Va bene, così l'opzione migliore che posso darvi è questo: http://jsfiddle.net/qK8rr/2/

+0

Suona come un disco rotto, ma per favore inserisci il tuo codice nella risposta (questa è considerata la miglior pratica su SO). ':)' –

5

rispondere alla tua domanda originale, sì, questo è possibile. Quando l'evento Mousedown si attiva su un elemento, l'elemento diventa attivo ed è selezionabile dallo pseudoselettore: attivo. In jQuery se non viene selezionato nulla viene restituito un array vuoto, possiamo usarlo a nostro vantaggio in combinazione con la proprietà array .length e ruotare lo pseudo-selettore attivo in un controllo per vedere se il mouse è inattivo su un particolare elemento o meno così:

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

Verificando il mouse era giù sopra un particolare elemento in un determinato punto nel tempo è un evento diverso e non va con il titolo di questa interrogazione e dovrebbe essere cambiato mi permetto di aggiungere. Google mi ha portato qui e questa risposta è per quelli che inevitabilmente seguiranno.

0

Dai un'occhiata a questo. http://jsfiddle.net/b1Lzo60n/

Mousedown avvia un timer che verifica se il mouse è ancora inattivo dopo 1 secondo.

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

Codice:

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'); 
}); 
Problemi correlati