2012-04-01 8 views
0

Ich habe eine Leinwand, die für Maus-down-Ereignis abhört ... aber ich wollte es detaillierter machen, indem ich auf die Tasten höre und wenn es Doppelklicks waren oder nicht.Überprüfen Sie, welche Maustaste gedrückt wurde und ob es ein Doppelklick ist?

Ich habe dies:

canvas.addEventListener("mousedown", what_button, false); 

Dann wird eine Funktion mit dem Namen what_button:

function what_button(e){ 
//check which button on the mouse 
//was it a double click ? 

} 

Ist das möglich in JavaScript?

+0

Es gibt ein "dblclick" -Ereignis, an das Sie einen Handler binden können ... –

+0

Wahr, aber das würde dann beide Maustaste + dbl klick? – Sir

+0

Ihre Anwendung erwartet Doppelklick mit der rechten Maustaste? Ich kann mir kein Programm vorstellen, bei dem ein rechter Knopf mit Doppelklick eine Funktion hat ... –

Antwort

1

Ich glaube nicht, dass das Ereignis 'mousedown' voraussehen kann, ob ein zweiter Mausklick auftritt oder nicht. Sie werden beide binden, müssen 'click' und 'dblclick' und dann das Verhalten außer Kraft setzen, wenn ein Doppelklick aufgetreten ...

im Handler die e.button Eigenschaft erfahren Sie, welche Schaltfläche geklickt wurde:

0 => left 
1 => middle 
2 => right 

Dies funktioniert für mich:

var dblclick; 
var timeout; 

$(document).on('click', function (e) { 
    if (!timeout) { 
     timeout = setTimeout(function() { 
      timeout = 0;   
      handler(dblclick ? 'dblclick' : 'click'); 
      dblclick = false; 
     }, 200); 
    } 
}); 

$(document).on('dblclick', function (e) { 
    dblclick = true; 
}); 

// this function receives either 'click' or 'dblclick' 
// and performs the corresponding action 
function handler (type) { 
    alert(type); 
} 

Live-Demo:http://jsfiddle.net/f73tY/1/

Ich verwende einen Verzögerungswert von 200. Ich habe festgestellt, dass (zumindest auf meiner Maschine) ein Wert von 100 keinen Doppelklick erkennt.

+0

Gibt es eine Möglichkeit zu tun, wenn dblclick == false, dann ist es ein Klick Typ Check-Ereignis Listener? – Sir

+0

@Dave Die Sache ist, wenn Sie einen Doppelklick ausführen, wird der erste '' click'' -Handler sofort ausgeführt, nachdem Sie zum ersten Mal geklickt haben und * bevor * Sie das zweite Mal angeklickt haben. Daher kann der Handler offensichtlich nicht wissen, ob dies der erste Klick eines Doppelklicks ist. (Der zweite Klick trat noch nicht auf, als der erste Klick-Handler ausgeführt wurde.) –

+0

Was ist, wenn ich einen Timer in der Funktion verwende, die er aufruft und den Unterschied zwischen den beiden Zeiten berechnet, wenn er niedriger als ein bestimmter Wert ist als Doppelklick zählen? – Sir

0

Verwendung click/dblclick:

var button = document.getElementById('myButton'); 

button.ondblclick = function() { 
    doubleClick = true; 
};​ 

Sie auch, dass die Informationen hinzufügen können in Ihrem Code ein normalClick = false dann verwenden.

+1

Ihr Beispiel verwendet keinen Event Listener = /? Wie würde das auf einer Leinwand funktionieren? – Sir

+0

Meinst du Ereignis-Listener wie folgt: 'button.addEventListener ('dblclick' ...)' ?? Weil es genauso funktionieren kann. – 0x499602D2

+0

Ja aber das würde nur dblclick nicht die Option für entweder/oder erlauben. – Sir

Verwandte Themen