2009-08-03 26 views
9

我希望能夠捕捉雙鍵按鍵(例如Char T),以便進行一些特殊處理。我希望按鍵發生得足夠快,不會被解釋爲兩個單獨的按鍵,只是像雙擊。 任何想法,我可以如何實現這一目標?如何在javascript中捕獲雙重按鍵?

回答

16

當鑰匙被擊中時,記下時間。然後將它與您記下密鑰的時間相比較最後

如果差異在您的閾值內,則認爲它是雙倍的。否則,不要。粗糙例如:

var delta = 500; 
var lastKeypressTime = 0; 
function KeyHandler(event) 
{ 
    if (String.fromCharCode(event.charCode).toUpperCase()) == 'T') 
    { 
     var thisKeypressTime = new Date(); 
     if (thisKeypressTime - lastKeypressTime <= delta) 
     { 
     doDoubleKeypress(); 
     // optional - if we'd rather not detect a triple-press 
     // as a second double-press, reset the timestamp 
     thisKeypressTime = 0; 
     } 
     lastKeypressTime = thisKeypressTime; 
    } 
} 
+0

此解決方案使用Ctrl鍵。他沒有說他需要這個(儘管對我來說是有意義的)。 – 2009-08-03 18:36:34

+0

** @ Josh Stodola:**哈!顯示我仔細閱讀......看到「Char T」,讀「Ctrl T」...哎呀! – Shog9 2009-08-03 18:42:17

10

有你,當一個按鍵事件發生設置爲true的變量(也許first_press),並啓動一個計時器,將在設定的時間量後的變量重置爲假(但快你想他們按下鍵)。

在你的按鍵事件中,如果該變量爲真,那麼你有一個雙擊。

實施例:

var first_press = false; 
function key_press() { 
    if(first_press) { 
     // they have already clicked once, we have a double 
     do_double_press(); 
     first_press = false; 
    } else { 
     // this is their first key press 
     first_press = true; 

     // if they don't click again in half a second, reset 
     window.setTimeout(function() { first_press = false; }, 500); 
    } 
}