Щодо рішення 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 використовує глобальний об'єкт події, який називається ... "подія".
Між іншим, у IE є функція, корисна у вашому випадку: коли інші браузери надсилають "кнопку" лише для подій кнопки миші (onclick, onmousedown та onmouseup), IE також надсилає його і onmousemove. Таким чином, ви можете почати слухати onmousemove, коли вам потрібно знати стан кнопки, і перевірити наявність evt.button, як тільки ви його отримали - тепер ви знаєте, які кнопки миші були натиснуті:
// for IE only!
document.body.onmousemove = function(){
if(event.button){
// aha! we caught a feisty little sheila!
}
};
Звичайно, ви нічого не отримуєте, якщо вона грає мертвою і не рухається.
Відповідні посилання:
Оновлення №1 : Я не знаю, чому я переніс код коду в стилі document.body. Краще буде приєднати обробників подій безпосередньо до документа.