Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查按下了哪个鼠标按钮,是否是双击?_Javascript - Fatal编程技术网

Javascript 检查按下了哪个鼠标按钮,是否是双击?

Javascript 检查按下了哪个鼠标按钮,是否是双击?,javascript,Javascript,我有一张画布,可以监听鼠标按下事件。。。但我想通过听按钮,看它们是否是双击来让它更详细 我有这个: canvas.addEventListener("mousedown", what_button, false); 然后是一个名为what_button的函数: function what_button(e){ //check which button on the mouse //was it a double click ? } 这在JavaScript中可能吗?我认为'mou

我有一张画布,可以监听鼠标按下事件。。。但我想通过听按钮,看它们是否是双击来让它更详细

我有这个:

 canvas.addEventListener("mousedown", what_button, false);
然后是一个名为what_button的函数:

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

 }

这在JavaScript中可能吗?

我认为
'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 );
}
现场演示:


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

使用
单击
/
dblclick

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

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

您甚至可以添加一个
normalClick=false
,然后在代码中使用该信息。

有一个
'dblclick'
事件,您可以在该事件上将处理程序绑定到…True,但这样会同时调用鼠标下键和dbl单击?您的应用程序希望用鼠标右键双击?我想不出有哪个程序有右键双击的功能…它还没有,但我想知道我可用的选项>>对不起,没有在这里粘贴链接,你的例子是没有使用事件侦听器=/?这在画布上是如何工作的?您是指这样的事件侦听器:
按钮。addEventListener('dblclick'…)
??因为它可以以相同的方式工作。是的,但这只允许dblclick,而不是/or的选项。如果dblclick==false,那么它是事件侦听器上的单击类型检查,有什么方法可以做吗?@Dave问题是当你双击,第一个
'click'
处理程序在您第一次单击之后和第二次单击之前立即执行。因此,处理程序显然无法知道这是否是双击的第一次单击。(在执行第一次单击处理程序时,第二次单击尚未发生。)因此,如果我在它调用的函数中使用计时器并计算两次之间的差异,那么如果其低于某个值,则将被视为双击?Dave我已用解决方案更新了我的答案。(我使用jQuery绑定事件,但这与我的代码的功能无关。)关于鼠标按钮编号,这可能是它们应该是的,但浏览器不同意,请参阅。“左”、“右”和“中”的整个概念是错误的,它赋予按钮的空间关系以意义,而它应该基于其他一些标准(例如目的)。注意,在这本书中,它说为“配置为左手使用”的鼠标反转它们。那么“左”和“右”现在有什么意义呢?