En ce qui concerne la solution de Pax: cela ne fonctionne pas si l'utilisateur clique sur plus d'un bouton intentionnellement ou accidentellement. Ne me demandez pas comment je sais :-(.
Le code correct devrait être comme ça:
var mouseDown = 0;
document.body.onmousedown = function() {
++mouseDown;
}
document.body.onmouseup = function() {
--mouseDown;
}
Avec le test comme celui-ci:
if(mouseDown){
// crikey! isn't she a beauty?
}
Si vous voulez savoir sur quel bouton vous appuyez, préparez-vous à faire de mouseDown un tableau de compteurs et à les compter séparément pour des boutons séparés:
// 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;
}
Vous pouvez maintenant vérifier quels boutons ont été appuyés exactement:
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!
}
}
}
Sachez maintenant que le code ci-dessus ne fonctionnera que pour les navigateurs conformes à la norme qui vous transmettent un numéro de bouton à partir de 0. IE utilise un masque de bits des boutons actuellement enfoncés:
- 0 pour "rien n'est pressé"
- 1 pour gauche
- 2 pour la droite
- 4 pour le milieu
- et toute combinaison de ci-dessus, par exemple 5 pour gauche + milieu
Alors ajustez votre code en conséquence! Je laisse ça comme un exercice.
Et rappelez-vous: IE utilise un objet événement global appelé… "événement".
Incidemment, IE a une fonctionnalité utile dans votre cas: lorsque d'autres navigateurs envoient un "bouton" uniquement pour les événements de bouton de la souris (onclick, onmousedown et onmouseup), IE l'envoie également avec onmousemove. Ainsi, vous pouvez commencer à écouter onmousemove lorsque vous avez besoin de connaître l'état du bouton et vérifier evt.button dès que vous l'avez - vous savez maintenant sur quels boutons de la souris ont été enfoncés:
// for IE only!
document.body.onmousemove = function(){
if(event.button){
// aha! we caught a feisty little sheila!
}
};
Bien sûr, vous n'obtenez rien si elle joue la morte et ne bouge pas.
Liens pertinents:
Mise à jour n ° 1 : Je ne sais pas pourquoi j'ai repris le code de style document.body. Il sera préférable d'attacher des gestionnaires d'événements directement au document.