web-dev-qa-db-fra.com

Détecter le bouton gauche de la souris

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?

31
Boris Hamanov

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

41
Tim Down

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');
    }
}
10
robocat

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}"
0
Rajesh Paul

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"

0
Igor Krupitsky