En ce qui concerne la solution de Pax : elle ne fonctionne pas si l'utilisateur clique sur plus d'un bouton, intentionnellement ou accidentellement. Ne me demandez pas comment je le 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 ça :
if(mouseDown){
// crikey! isn't she a beauty?
}
Si vous voulez savoir quel bouton est pressé, soyez prêt à faire de mouseDown un tableau de compteurs et à les compter séparément pour les différents boutons :
// 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é pressé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 que le code ci-dessus ne fonctionne que pour les navigateurs conformes aux normes qui vous transmettent un numéro de bouton à partir de 0. IE utilise un masque binaire des boutons actuellement pressés :
- 0 pour " rien n'est appuyé "
- 1 pour la gauche
- 2 pour la droite
- 4 pour le milieu
- et toute combinaison des éléments ci-dessus, par exemple 5 pour gauche + milieu
Ajustez donc votre code en conséquence ! Je le laisse comme un exercice.
Et rappelez-vous : IE utilise un objet événement global appelé "événement".
Par ailleurs, IE possède une fonctionnalité utile dans votre cas : alors que les autres navigateurs envoient "button" uniquement pour les événements liés aux boutons de la souris (onclick, onmousedown et onmouseup), IE l'envoie également avec onmousemove. Vous pouvez donc 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 obtenu - vous savez maintenant quels boutons de la souris ont été pressé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 fait le mort et ne bouge pas.
Liens pertinents :
Mise à jour n° 1 : Je ne sais pas pourquoi j'ai reporté le code document.body-style. Il serait préférable d'attacher les gestionnaires d'événements directement au document.
28 votes
Pourquoi vous acceptez une réponse qui ne répond pas à votre question. Enregistrer mousedown et mouseup est une erreur (car vous pouvez mouseup en dehors du navigateur et lui faire croire que vous êtes toujours en train de glisser). Venir après votre problème et atteindre cette page est complètement inutile.
3 votes
Jack, cela répond à ma question. Veuillez lire ma question et ensuite la réponse. Apparemment, plus de 100 autres personnes sont d'accord pour dire que c'était une bonne réponse.
6 votes
Oui mais moi, alfred, et d'autres 8 vous disent que le suivi de mouseup et mousedown n'est pas la bonne façon. La bonne réponse devrait impliquer l'analyse de l'objet événement dans le gestionnaire de votre choix, ou l'analyse de tous les événements liés à la souris (comme entrée/sortie) si vous avez besoin d'une vérification dans le temps au lieu d'une vérification par événement.
1 votes
Cette question a été posée et répondue il y a plus de 7 ans. Je ne reçois pas de notification lorsqu'il y a de nouvelles réponses (mais je le fais pour les commentaires). Rédigez une meilleure réponse et la communauté la fera passer en tête :) Beaucoup d'informations deviennent périmées et les choses changent.
3 votes
@TM. Désolé de faire du nécro, mais... Non, cette info n'arrivera jamais au sommet. Une réponse non personnelle, une fois acceptée, reste en haut pour toujours. De même, "tant de gens ont voté pour celle-ci" ne signifie pas que la réponse est bonne ; cela signifie simplement que beaucoup de gens l'ont vue, l'ont trouvée bonne et ont appuyé sur le bouton "upvote" parce qu'elle semblait leur convenir.
0 votes
Duplicata possible de Vérifier si le bouton de la souris est baissé pendant le survol ?