Comment puis-je détecter un événement de bouton rightmouse sur mousedown?

je suis en train de mettre à jour/déboguer et d'étendre les capacités de mon script modulable et j'ai besoin d'être capable d'atteindre le résultat suivant:

whatever.onRightMouseButtonMousedown = preventDefault();

j'ai fait beaucoup de recherche en vain, cependant, je sais qu'il est possible de le faire parce que quand j'utilise jquery-ui draggable, il empêche la capacité de faire glisser des éléments quand vous souriez avec le bouton droit de la souris. Je veux imiter cette capacité, et apprendre comment cela fonctionne pour que je puisse l'implémenter maintenant et dans le futur comme nécessaire.

Note: s'il vous Plaît ne pas me donner des informations sur la façon d'utiliser jquery jquery-ui déplaçable (je le suis déjà familier avec elle), je veux apprendre comment ils ont mis en œuvre, ou comment il est possible de mettre en œuvre la détection d'un mousedown avec le bouton droit de la souris, de sorte que je peux empêcher les éléments de dragué avec le bouton droit de la souris.

11
demandé sur person0 2012-03-01 22:06:04

3 réponses

normalement quand vous avez n'importe quel type d'événement de souris, vous voudrez l'avoir opérez seulement sur un type de clic de souris. Par conséquent, les événements passés à vos callbacks ont une propriété qui vous permet de distinguer entre les types de clics.

ces données sont transmises par bouton propriété des données d'événement. Voir MDN pour trouver quelles valeurs représentent quelles données.

par conséquent, vous ne désactivez pas le clic droit, vous à la place n'activez votre fonctionnalité que pour le clic gauche. Voici un exemple [pauvre]:

element.onmousedown = function(eventData) {
  if (eventData.button === 1) {
      alert("From JS: the (left?) button is down!")
  }
}  

l'équivalent en jQuery:

$("div").mousedown(function(eventData) {
    if (eventData.which === 1) {
        alert("From JQuery: which=" + de.which)
    }
});

notez que si vous n'utilisez pas jquery, les valeurs retournées seront différentes d'un navigateur à l'autre. jQuery unifie les valeurs à travers les navigateurs, en utilisant 1 pour la gauche, 2 pour le milieu, 3 pour la droite:

 element.onmousedown = function(eventData) {
   if (eventData.button === 0) {
     console.log("From JS: the (left?) button is down!")
   }
 }

 $("#element").ready(function() {
   $("div").mousedown(function(de) {
     console.log("From JQuery: which=" + de.which);
   });
 });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="element" style="width: 100px; height: 100px; background-color: blue" />
18
répondu FriendlyGuy 2016-06-23 16:09:27

Le html:

<a href="#" onmousedown="mouseDown(event);">aaa</a>​​​​​​​​​​​​​​​​​​​​​​​​​​​

le javascript:

function mouseDown(e) {
  e = e || window.event;
  switch (e.which) {
    case 1: alert('left'); break;
    case 2: alert('middle'); break;
    case 3: alert('right'); break; 
  }
}​

démo.

4
répondu atiruz 2015-10-03 10:35:16

Ce n'est pas très simple. Quirksmode.org a un l'article sur les propriétés des événements.

Regardez sous " quel bouton de la souris a été cliqué?'/ 'Clic droit'. Il varie selon le navigateur.

3
répondu andrewmu 2012-03-01 18:11:43