2012-04-01 144 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

相關問題