2009-08-03 53 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); 
    } 
}