如何在javascript中捕获双按键?
我希望能够捕捉双按键(例如字符T),以便进行一些特殊处理。我希望按键足够快,不会像双击一样被解释为两个单独的按键。 有什么办法可以做到这一点吗?当按键被按下时,记下时间。然后将其与您记录的上一次击键的时间进行比较 如果差异在你的阈值之内,考虑它是双重的。否则,不要。粗略的例子:如何在javascript中捕获双按键?,javascript,keypress,Javascript,Keypress,我希望能够捕捉双按键(例如字符T),以便进行一些特殊处理。我希望按键足够快,不会像双击一样被解释为两个单独的按键。 有什么办法可以做到这一点吗?当按键被按下时,记下时间。然后将其与您记录的上一次击键的时间进行比较 如果差异在你的阈值之内,考虑它是双重的。否则,不要。粗略的例子: var delta = 500; var lastKeypressTime = 0; function KeyHandler(event) { if ( String.fromCharCode(event.char
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;
}
}
var delta=500;
var lastKeypressTime=0;
函数KeyHandler(事件)
{
if(String.fromCharCode(event.charCode.toUpperCase())=='T')
{
var thisKeypressTime=新日期();
如果(thisKeypressTime-lastKeypressTime有一个变量(可能是第一次按
)在按键事件发生时设置为true,并启动一个计时器,在设置的时间量(无论您希望他们按键的速度如何)后将该变量重置为false
在您的按键事件中,如果该变量为真,则您有一个双击
例如:
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);
}
}
我知道现在回答这个问题已经太迟了,但我是如何实现的:
let pressed;
let lastPressed;
let isDoublePress;
const handleDoublePresss = key => {
console.log(key.key, 'pressed two times');
}
const timeOut = () => setTimeout(() => isDoublePress = false, 500);
const keyPress = key => {
pressed = key.keyCode;
if (isDoublePress && pressed === lastPressed) {
isDoublePress = false;
handleDoublePresss(key);
} else {
isDoublePress = true;
timeOut();
}
lastPressed = pressed;
}
window.onkeyup = key => keyPress(key);
你可以做“半秒”一个用户可以更改的可配置的持久值。可用性规则!我不是想给他提供一个临时解决方案。只是向他展示一般的想法。不管怎样,你会立即出现大量超时,这最终会让用户浏览器崩溃。Shog使用Date的答案肯定更好。@Josh Stodola:这可能可以通过将计时器ID保存在某个位置并在开始新的计时器ID之前停止它来避免。也就是说,这不仅仅是保留一个时间戳……我能想到的唯一用途是,如果您想对单次按下和双次按下执行两个不同的、互斥的操作:在计时器回调coul中进行检查d如果第一次按下的仍然为真,则触发前者,如果按下的仍然为假,则触发后者。此解决方案使用Ctrl键。他不说他需要那个键(尽管这对我来说很有意义)。@Josh Stodola:哈!显示了我读得多么仔细……看到了“Char T”,读到了“Ctrl T”OOPS!欢迎来到StAdvExcel。除了您提供的答案,请考虑提供一个简要解释为什么以及如何修复这个问题。