Vous pouvez écrire un peu de code pour garder une trace de l'état du bouton gauche de la souris, et avec un peu de fonction, vous pouvez pré-traiter le cas de la variable dans l' mousemove
événement.
Pour garder une trace de l'état de la LMB, lier un événement à niveau du document pour mousedown
et mouseup
et vérifiez e.which
de mettre ou d'enlever le drapeau.
Le pré-traitement est effectué par l' tweakMouseMoveEvent()
fonction dans mon code. Pour soutenir les versions IE < 9, vous devez vérifier si les boutons de la souris ont été libérés à l'extérieur de la fenêtre et effacer le drapeau si. Ensuite, vous pouvez changer le passé de l'événement variable. Si e.which
a été à l'origine de 1 (pas de bouton ou de la norme LMB) et l'état actuel de la gauche, le bouton n'est pas pressé, il suffit de mettre e.which
de 0
, et de les utiliser que dans le reste de votre mousemove
événement pour vérifier l'absence de boutons enfoncé.
L' mousemove
gestionnaire dans mon exemple qui vient d'appels réglage de la fonction de passage de l'événement en cours de la variable, puis affiche la valeur de e.which
.
$(function() {
var leftButtonDown = false;
$(document).mousedown(function(e){
// Left mouse button was pressed, set flag
if(e.which === 1) leftButtonDown = true;
});
$(document).mouseup(function(e){
// Left mouse button was released, clear flag
if(e.which === 1) leftButtonDown = false;
});
function tweakMouseMoveEvent(e){
// Check from jQuery UI for IE versions < 9
if ($.browser.msie && !e.button && !(document.documentMode >= 9)) {
leftButtonDown = false;
}
// If left button is not set, set which to 0
// This indicates no buttons pressed
if(e.which === 1 && !leftButtonDown) e.which = 0;
}
$(document).mousemove(function(e) {
// Call the tweak function to check for LMB and set correct e.which
tweakMouseMoveEvent(e);
$('body').text('which: ' + e.which);
});
});
Essayer une démo en live ici: http://jsfiddle.net/G5Xr2/