Je déteste ce désordre avec les boutons de souris créés par W3C et MS! Je veux savoir si le bouton gauche de la souris est enfoncé lorsque j'obtiens un événement de souris.
J'utilise ce code
// Return true if evt carries left mouse button press
function detectLeftButton(evt) {
// W3C
if (window.event == null) {
return (evt.button == 0)
}
// IE
else {
return (evt.button == 1);
}
}
Cependant, cela ne fonctionne pas dans Opera et Chrome, car il se trouve que window.event existe également là-bas.
Alors qu'est-ce que je fais? J'ai une certaine détection de navigateur, mais nous savons tous que cela ne peut pas être invoqué avec tout le masquage que certains navigateurs font récemment. Comment détecter de manière fiable le bouton gauche de la souris?
Réponse mise à jour. Ce qui suit détectera si le bouton gauche et uniquement le bouton gauche de la souris est enfoncé:
function detectLeftButton(evt) {
evt = evt || window.event;
if ("buttons" in evt) {
return evt.buttons == 1;
}
var button = evt.which || evt.button;
return button == 1;
}
Pour plus d'informations sur la gestion des événements de souris en JavaScript, essayez http://unixpapa.com/js/mouse.html
Il y a maintenant un norme W3Cevent.buttons
propriété prise en charge par IE9 en mode standard , et Gecko 15 + .
W3C complètement bourré place la propriété event.button, donc pour un navigateur conforme aux normes event.button vaut 0, mais pour les navigateurs créés avant la norme, event.button vaut 1.
Le code doit donc éviter d'utiliser event.button
sauf pour les anciens navigateurs. Le code suivant devrait fonctionner:
function detectLeftButton(event) {
if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) {
return false;
} else if ('buttons' in event) {
return event.buttons === 1;
} else if ('which' in event) {
return event.which === 1;
} else {
return (event.button == 1 || event.type == 'click');
}
}
Vous pouvez utiliser le code suivant-
onmouseup="if(window.event.which==1){//code for left click}
else if(window.event.which==3){//code for right click}"
Même si event.buttons fonctionne désormais dans Chrome, Safari ne le prend toujours pas en charge. Une solution de contournement consiste à utiliser les événements onmousedown et onmouseup au niveau du document ou du parent comme: onmousedown = "bMouseDown = true" onmouseup = "bMouseDown = false"