In Bezug auf die Lösung von Pax: Es funktioniert nicht, wenn der Benutzer absichtlich oder versehentlich auf mehr als eine Schaltfläche klickt. Frag mich nicht, woher ich das weiß :-(.
Der richtige Code sollte so lauten:
var mouseDown = 0;
document.body.onmousedown = function() {
++mouseDown;
}
document.body.onmouseup = function() {
--mouseDown;
}
Mit dem Test wie folgt:
if(mouseDown){
// crikey! isn't she a beauty?
}
Wenn Sie wissen möchten, welche Taste gedrückt wird, müssen Sie mouseDown zu einer Reihe von Zählern machen und diese separat für separate Tasten zählen:
// 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;
}
Jetzt können Sie überprüfen, welche Tasten genau gedrückt wurden:
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!
}
}
}
Seien Sie jetzt gewarnt, dass der obige Code nur für standardkonforme Browser funktioniert, die Ihnen eine Schaltflächennummer ab 0 übergeben. IE verwendet eine Bitmaske der aktuell gedrückten Tasten:
- 0 für "nichts wird gedrückt"
- 1 für links
- 2 für rechts
- 4 für Mitte
- und eine beliebige Kombination von oben, z. B. 5 für links + Mitte
Passen Sie also Ihren Code entsprechend an! Ich lasse es als Übung.
Und denken Sie daran: IE verwendet ein globales Ereignisobjekt mit dem Namen ... "Ereignis".
Übrigens hat der IE eine in Ihrem Fall nützliche Funktion: Wenn andere Browser "Schaltfläche" nur für Maustastenereignisse (onclick, onmousedown und onmouseup) senden, sendet der IE diese auch mit onmousemove. Sie können also auf onmousemove warten, wenn Sie den Tastenstatus kennen müssen, und nach evt.button suchen, sobald Sie ihn erhalten haben - jetzt wissen Sie, welche Maustasten gedrückt wurden:
// for IE only!
document.body.onmousemove = function(){
if(event.button){
// aha! we caught a feisty little sheila!
}
};
Natürlich bekommst du nichts, wenn sie tot spielt und sich nicht bewegt.
Relevante Links:
Update Nr. 1 : Ich weiß nicht, warum ich den document.body-Code übernommen habe. Es ist besser, Ereignishandler direkt an das Dokument anzuhängen.