2012-04-01 107 views
0

我有一个侦听鼠标按下事件的画布......但是我想通过听按钮,以及是否双击鼠标来使它更加详细。检查哪个鼠标按钮被按下,是否双击?

我有这样的:

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

了一个名叫what_button功能:

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

} 

这可能在JavaScript?

+0

有一个''dblclick''事件,您可以将处理程序绑定到... – 2012-04-01 23:04:59

+0

正确,但那样会调用鼠标+ dbl单击? – Sir 2012-04-01 23:06:39

+0

您的应用程序需要用鼠标右键进行双击?我想不出任何程序,右键双击有一个功能... – 2012-04-01 23:09:22

回答

1

我不认为'mousedown'事件能够预测是否会发生第二次鼠标点击。你必须结合两者'click''dblclick',然后重写的行为,如果发生了双击...

处理程序内部,e.button属性告诉你哪个按钮被点击:

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

这个工作对我来说:

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); 
} 

现场演示:http://jsfiddle.net/f73tY/1/

我使用延迟值200。我发现(至少在我的机器上)值为100没有检测到双击。

+0

有没有办法做到这一点,如果dblclick == false那么它的点击类型检查事件监听器? – Sir 2012-04-01 23:53:16

+0

@Dave事情是当你双击时,第一次点击''click''处理程序在你第一次点击之后立即执行,* *在你第二次点击之前*。所以,处理程序显然不知道这是否是第一次双击。 (到第一个点击处理程序执行时,第二次点击还没有发生。) – 2012-04-02 00:01:36

+0

那么,如果我在它调用的函数中使用一个计时器,并计算两次之间的差值,那么如果它低于某个值,它会算作双击? – Sir 2012-04-02 00:04:35

0

使用click/dblclick

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

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

你甚至可以添加一个normalClick = false然后在代码中使用这些信息。

+1

你是不是使用事件监听器= /?这将如何在画布上工作? – Sir 2012-04-01 23:52:12

+0

你的意思是这样的事件监听器:'button.addEventListener('dblclick'...)'?因为它可以以同样的方式工作。 – 0x499602D2 2012-04-01 23:57:06

+0

是的,但这只会允许dblclick而不是/或选项。 – Sir 2012-04-02 00:05:10