Относительно решения Pax: оно не работает, если пользователь нажимает более одной кнопки преднамеренно или случайно. Не спрашивайте меня, откуда я знаю: - (.
Правильный код должен быть таким:
var mouseDown = 0;
document.body.onmousedown = function() {
++mouseDown;
}
document.body.onmouseup = function() {
--mouseDown;
}
С таким тестом:
if(mouseDown){
// crikey! isn't she a beauty?
}
Если вы хотите знать, какая кнопка нажата, будьте готовы сделать mouseDown массивом счетчиков и посчитать их отдельно для отдельных кнопок:
// let's pretend that a mouse doesn't have more than 9 buttons
var mouseDown = [0, 0, 0, 0, 0, 0, 0, 0, 0],
mouseDownCount = 0;
document.body.onmousedown = function(evt) {
++mouseDown[evt.button];
++mouseDownCount;
}
document.body.onmouseup = function(evt) {
--mouseDown[evt.button];
--mouseDownCount;
}
Теперь вы можете проверить, какие кнопки были нажаты в точности:
if(mouseDownCount){
// alright, let's lift the little bugger up!
for(var i = 0; i < mouseDown.length; ++i){
if(mouseDown[i]){
// we found it right there!
}
}
}
Теперь предупреждаем, что приведенный выше код будет работать только для стандартных браузеров, которые передают вам номер кнопки, начиная с 0 и выше. IE использует битовую маску нажатых в данный момент кнопок:
- 0 для "ничего не нажимается"
- 1 для левого
- 2 по праву
- 4 для среднего
- и любая комбинация выше, например, 5 для левого + среднего
Так что скорректируйте свой код соответственно! Я оставляю это как упражнение.
И помните: IE использует объект глобального события под названием & hellip; "Событие".
Между прочим, в IE есть функция, полезная в вашем случае: когда другие браузеры отправляют «кнопку» только для событий кнопки мыши (onclick, onmousedown и onmouseup), IE также отправляет ее с onmousemove. Таким образом, вы можете начать прослушивание onmousemove, когда вам нужно узнать состояние кнопки, и проверить evt.button, как только вы его получите & mdash; Теперь вы знаете, какие кнопки мыши были нажаты:
// for IE only!
document.body.onmousemove = function(){
if(event.button){
// aha! we caught a feisty little sheila!
}
};
Конечно, вы ничего не получите, если она играет мертвой и не двигается.
Соответствующие ссылки:
Обновление # 1 : я не знаю, почему я перенес код в формате document.body. Будет лучше прикрепить обработчики событий непосредственно к документу.