Per quanto riguarda la soluzione di Pax: non funziona se l'utente fa clic intenzionalmente o accidentalmente su più di un pulsante. Non chiedermi come lo so :-(.
Il codice corretto dovrebbe essere così:
var mouseDown = 0;
document.body.onmousedown = function() {
++mouseDown;
}
document.body.onmouseup = function() {
--mouseDown;
}
Con il test in questo modo:
if(mouseDown){
// crikey! isn't she a beauty?
}
Se vuoi sapere quale pulsante viene premuto, preparati a rendere mouseDown un array di contatori e contali separatamente per pulsanti separati:
// let's pretend that a mouse doesn't have more than 9 buttons
var mouseDown = [0, 0, 0, 0, 0, 0, 0, 0, 0],
mouseDownCount = 0;
document.body.onmousedown = function(evt) {
++mouseDown[evt.button];
++mouseDownCount;
}
document.body.onmouseup = function(evt) {
--mouseDown[evt.button];
--mouseDownCount;
}
Ora puoi controllare quali pulsanti sono stati premuti esattamente:
if(mouseDownCount){
// alright, let's lift the little bugger up!
for(var i = 0; i < mouseDown.length; ++i){
if(mouseDown[i]){
// we found it right there!
}
}
}
Ora tieni presente che il codice sopra funzionerebbe solo per i browser conformi allo standard che ti passano un numero di pulsante a partire da 0 in su. IE utilizza una maschera di bit dei pulsanti attualmente premuti:
- 0 per "non viene premuto nulla"
- 1 a sinistra
- 2 a destra
- 4 per metà
- e qualsiasi combinazione di cui sopra, ad es. 5 per left + middle
Quindi regola il tuo codice di conseguenza! Lo lascio come un esercizio.
E ricorda: IE utilizza un oggetto evento globale chiamato ... "evento".
Per inciso IE ha una funzione utile nel tuo caso: quando altri browser inviano "button" solo per eventi di pulsanti del mouse (onclick, onmousedown e onmouseup), IE lo invia anche con onmousemove. Quindi puoi iniziare ad ascoltare onmousemove quando devi conoscere lo stato del pulsante e controllare il pulsante evt. non appena l'hai ricevuto - ora sai quali pulsanti del mouse sono stati premuti:
// for IE only!
document.body.onmousemove = function(){
if(event.button){
// aha! we caught a feisty little sheila!
}
};
Ovviamente non otterrai nulla se lei gioca morta e non si muove.
Link rilevanti:
Aggiornamento n. 1 : non so perché ho riportato il documento in stile document.body. Sarà meglio collegare i gestori di eventi direttamente al documento.