Donc, mon problème est le suivant,

Je me demandais s'il y avait un moyen de détecter si un utilisateur fait un clic droit et un clic gauche simultanément et de valider une action s'il le fait dans jQuery. Il semble que le code ne puisse détecter qu'un clic droit ou un clic gauche à la fois dans les événements de souris.

MISE À JOUR

Merci pour les réponses, j'ai finalement décidé que cette fonctionnalité serait trop géniale pour les utilisateurs lorsque j'essayais de l'implémenter. Espérons que ces réponses pourront également aider d'autres personnes.

0
Suliman Sharif 8 août 2016 à 17:56

3 réponses

Meilleure réponse

Vous pouvez créer des variables pour maintenir l'état de chaque bouton de la souris individuellement et l'utiliser pour déterminer si les deux boutons sont enfoncés:

window.isLeftMouseDown = false;
window.isRightMouseDown = false;

$(document).on('mousedown', function(e) {
  if (e.which == 1)
    window.isLeftMouseDown = true;
  else if (e.which == 3)
    window.isRightMouseDown = true;

  if (window.isLeftMouseDown && window.isRightMouseDown) {
    console.log('both down');
  }
});

$(document).on('mouseup', function(e) {
  if (e.which == 1)
    window.isLeftMouseDown = false;
  else if (e.which == 3)
    window.isRightMouseDown = false;
});

https://jsfiddle.net/2j151tpt/

2
Jason P 8 août 2016 à 15:12

Ma proposition est basée sur le temps écoulé en millisecondes entre les deux clics consécutifs:

$(function () {
  $('#btn').data('last-left-click', 0).on('mousedown contextmenu', function (e) {
    var nowTime = Date.now();
    if (e.which == 1) {
      $(this).data('last-left-click', nowTime);
    }
    if (e.which == 3) {
      // if less then 300 milliseconds....
      if ((nowTime - $(this).data('last-left-click')) < 300) {
        console.log('Both left and right clicked in sequence in less then 300 milliseconds!');
      }
      $(this).data('last-left-click', 0);
    }
  });
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>

<button id="btn">Click Me</button>
1
gaetanoM 8 août 2016 à 15:29

Quelque chose comme ça. Il utilise ES2015.

let left = false;

document.addEventListener('mousedown', e => {
    if (e.button === 0) {
        left = true;
    } else if (e.button === 2 && left) {
       fireYourFunctionForTwoButtons();
    }
})

document.addEventListener('mouseup', e => {
    if (e.button === 0) {
        left = false;
    }
});
1
Maxx 8 août 2016 à 15:08