【问题标题】:Detect double Ctrl keypress in JS检测JS中的双Ctrl键
【发布时间】:2010-12-15 00:37:03
【问题描述】:

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

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

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

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

【问题讨论】:

  • 不敢相信@Pekka 웃 有一个没有投票的问题,是第一个大声笑,还发现这个问题很有用,我正在寻找双班制

标签: javascript prototypejs keypress dom-events


【解决方案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/

【讨论】:

  • 它可以工作,但是当按住 Ctrl 键 300 毫秒时它也会触发。我将不得不添加一个“keyup”检查器,但这将作为它的基础。干杯!
  • 当按键被按下时它不会触发。可能是特定于浏览器的(我使用的是 Opera)
  • @Pekka 只需使用keyup ;-)
  • @jitter 我确实尝试了您的解决方案,但是即使在 dblCtrlKey 值打印为 139 时按下 ctrl 也是如此。我想知道我错过了什么。如果您有剪断的演示​​,我将不胜感激。
  • @bijayshrestha 添加了一个 jsfiddle。 dblCtrlKey 变量的值无关
【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2011-03-01
    • 2011-08-23
    • 1970-01-01
    相关资源
    最近更新 更多