Pax'ın çözümü ile ilgili olarak: kullanıcı bilerek veya yanlışlıkla birden fazla düğmeyi tıklarsa çalışmaz. Bana nasıl bildiğimi sorma :-(.
Doğru kod şöyle olmalıdır:
var mouseDown = 0;
document.body.onmousedown = function() {
++mouseDown;
}
document.body.onmouseup = function() {
--mouseDown;
}
Bu testle:
if(mouseDown){
// crikey! isn't she a beauty?
}
Hangi düğmeye basıldığını bilmek istiyorsanız, mouseDown'ı bir dizi sayaç yapmaya hazırlayın ve ayrı düğmeler için ayrı ayrı sayın:
// 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;
}
Şimdi hangi düğmelere tam olarak basıldığını kontrol edebilirsiniz:
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!
}
}
}
Şimdi yukarıdaki kodun yalnızca 0 ve daha yukarıdan itibaren bir düğme numarası ileten standart uyumlu tarayıcılarda çalışacağı konusunda uyarınız. IE, şu anda basılan düğmelerin bit maskesini kullanır:
- "Hiçbir şeye basılmaz" için 0
- 1 sol için
- 2 sağ için
- Orta için 4
- ve yukarıdaki herhangi bir kombinasyon, örneğin sol + orta için 5
Kodunuzu buna göre ayarlayın! Bir egzersiz olarak bırakıyorum.
Unutmayın: IE,… "event" adlı genel bir olay nesnesi kullanır.
Bu arada IE sizin durumunuzda kullanışlı bir özelliğe sahiptir: diğer tarayıcılar sadece fare düğmesi olayları (onclick, onmousedown ve onmouseup) için "düğme" gönderdiğinde, IE de onmousemove ile gönderir. Böylece düğme durumunu bilmeniz gerektiğinde çok fazla dinlemeye başlayabilir ve en kısa sürede evt düğmesini kontrol edebilirsiniz - şimdi hangi fare düğmelerine basıldığını biliyorsunuz:
// for IE only!
document.body.onmousemove = function(){
if(event.button){
// aha! we caught a feisty little sheila!
}
};
Elbette eğer ölü oynar ve hareket etmezse hiçbir şey elde edemezsiniz.
İlgili bağlantılar:
Güncelleme # 1 : Belgeyi neden taşıdığımı bilmiyorum. Gövde tarzı kod. Olay işleyicilerini doğrudan belgeye eklemek daha iyi olacaktır.