Вы можете написать немного кода, чтобы отслеживать состояние левой кнопки мыши, и с помощью небольшой функции вы можете предварительно обработать переменную события в событии mousemove
.
Чтобы отслеживать состояние LMB, свяжите событие с уровнем документа для mousedown
и mouseup
и проверьте, чтобы e.which
установил или снял флажок.
Предварительная обработка выполняется функцией tweakMouseMoveEvent()
в моем коде. Для поддержки версий IE <9 вы должны проверить, были ли кнопки мыши отпущены за пределы окна, и снять флажок, если это так. Затем вы можете изменить переданную переменную события. Если <code>e.which изначально был 1 (без кнопки или ЛКМ) и текущее состояние левой кнопки не было нажато, просто установите e.which
на 0
и используйте это в оставшейся части события mousemove
, чтобы проверить кнопки не нажимаются.
Обработчик mousemove
в моем примере просто вызывает функцию настройки, пропуская текущую переменную события, а затем выводит значение 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);
});
});
Попробуйте демо-версию здесь: http://jsfiddle.net/G5Xr2/