检测 JS 中的双 Ctrl 按键

Detect double Ctrl keypress in JS

提问人:Pekka 提问时间:11/10/2009 最后编辑:Brian Tompsett - 汤莱恩Pekka 更新时间:5/7/2021 访问量:4507

问:

我有一个自定义 CMS,并想添加一个“快捷菜单”,该菜单由在 300 毫秒内按两次键触发。 我使用原型,所以我的出发点显然是:Ctrl

Event.observe(document, 'keypress', function(event)
  { if(event.keyCode == Event.KEY_XYZ) { show_shortcuts});

我目前的方法是用当前时间(以毫秒为单位)填充全局变量,并在每次按键时检查按键是否发生在不到 300 毫秒之前。

但也许有一个更优雅的解决方案?

javascript prototypejs 按键 dom-events

评论

0赞 ncubica 6/22/2015
不敢相信@Pekka웃有一个没有赞成票的问题,是第一个哈哈,并且还发现这个问题很有用,我一直在寻找双班

答:

9赞 jitter 11/10/2009 #1

这应该有效。如果没有同时按下其他键(如 Alt 或 Shift),可能会添加一些进一步的检查。希望它是不言自明的,如果不是只是问,我会提供澄清。

var dblCtrlKey = 0;
Event.observe(document, 'keydown', function(event) {
  if (dblCtrlKey != 0 && event.ctrlKey) {
    alert("Ok double ctrl");
    dblCtrlKey = 0;
  } else {
    dblCtrlKey = setTimeout('dblCtrlKey = 0;', 300);
  }
});

https://jsfiddle.net/3tc26g7x/

评论

0赞 Pekka 11/10/2009
它可以工作,但是当按住 Ctrl 键 300 毫秒时,它也会触发。我将不得不添加一个“keyup”检查器,但这将作为它的基础。干杯!
0赞 jitter 11/10/2009
当按键保持按下状态时,它不会为我触发。可能是特定于浏览器的(我正在使用 Opera)
1赞 yckart 12/2/2012
@Pekka只是改用;-)keyup
0赞 bijayshrestha 2/19/2020
@jitter我确实尝试了您的解决方案,但是,即使 dblCtrlKey 值打印为 139,也可以按 ctrl 键。我想知道我错过了什么。如果您有被剪裁的演示,我将不胜感激。
0赞 jitter 5/7/2021
@bijayshrestha添加了一个 jsfiddle。变量的值无关紧要dblCtrlKey
4赞 Roland 3/23/2020 #2

function doubleControlEvent() {
  if (event.key === 'Control') {
  	timesCtrlClicked++
    if (timesCtrlClicked >= 2) {
      console.log('Double control')
      // Double Crtl is clicked add your code here
    }
    setTimeout(() => (timesCtrlClicked = 0), 200)
  }  
}

let timesCtrlClicked = 0;
document.addEventListener('keyup', doubleControlEvent, true)