2012-01-11 3 views
2

Можно проверить состояние кнопки мыши (нажата или отпущена). Я знаю, что это цель обработки событий в jquery, но мне интересно, можно ли выполнять функцию, если кнопка мыши не нажата без необходимости изменения положения кнопки (нажата для отпускания или наоборот)?Функция boolean для определения положения кнопки мыши

+1

Нет, это на самом деле не имеет большого смысла. Браузер не предоставляет такую ​​модель, которая постоянно контролирует все. Скорее, состояние мира захватывается, когда происходит событие, и передается любым зарегистрированным обработчикам. Кроме того, информация о событии, как правило, относится только к типу события. – Pointy

+0

Можете ли вы перефразировать. Я читал это четыре раза и до сих пор не понимаю. (может быть, это только я) – karim79

+0

Не понял ли я, или вы хотите получить состояние кнопки мыши в любое время (не только во время нажатия или отпускания кнопки мыши)? – Jasper

ответ

3

Try ниже код, DEMO здесь

$(document).mousedown (function() { 
    $('#result').text('Pressed'); 
}).mouseup (function() { 
    $('#result').text('Released'); 
}); 
1

Вы можете использовать mousedown и mouseup событие для обнаружения измененных событий мыши. Это событие должно быть связано с window. Demo: http://jsfiddle.net/uwzbn/

var mouseState = (function(){ 
    var mousestatus = 0; 
    $(window).mousedown(function(e) { 
     mousestatus = e.which; 
    }).mouseup(function(e){ 
     mousestatus = 0; 
    }); 
    return function() { 
     return mousestatus; 
    } 
})(); 

Эта функция возвращает четыре возможных значения:

0 Mouse released false 
1 Left click  true 
2 Middle click  true 
3 Right click  true 

В логическом контексте значение функции Возврата оценивает ложь, когда мышь не вниз. Когда мышь нажата, вы можете прочитать, какую клавишу мыши нажата (в качестве бонуса).

+0

Интересно, если это слишком умно для вашего же блага, если я нажму 2 кнопки и отпустите один, состояние будет равно 0, даже если у меня еще одна кнопка вниз : p – Esailija

+0

@Esailija Все текущие ответы страдают от этой проблемы. Afaik, нет надежного решения для этого: возможно также и обратное, вы можете открыть контекстное меню и выпустить мышь внутри меню. Состояние мыши тогда застряло бы в 3. –

+0

, и вы могли бы преодолеть его более сложным кодом (гораздо менее сложным, если вы просто отслеживаете логическое), но это контекстное меню не может быть преодолено. – Esailija

1
$(function() { 

    //setup flag for the state of the mouse button and create an object that converts an event type into a boolean for the flag 
    var mousePressed = false, 
     mouseConvert = { 
      mousedown : true, 
      mouseup : false 
     }; 

    //bind to the document's mousedown and mouseup events to change the flag when necessary 
    $(document).on('mousedown mouseup', function (event) { 

     //set the flag to the new state of the mouse button 
     mousePressed = mouseConvert[event.type]; 

     //if you only want to watch one mouse button and not all of them then 
     //you can create an if/then statement here that checks event.which 
     //and only updates the flag if it is the button you want, check-out Rob W.'s 
     //answer to see the different values for event.which with respect to the mouse 
    }); 
    //now you can check the value of the `mousePressed` variable, if it is equal to `true` then the mouse is currently pressed 
}); 
Смежные вопросы