【问题标题】:Keydown Event with "Ctrl, Shift or Alt" does not trigger on Windows带有“Ctrl、Shift 或 Alt”的 Keydown 事件不会在 Windows 上触发
【发布时间】:2017-12-03 02:36:58
【问题描述】:

我想知道用户在鼠标移动期间何时按下 Shift 键。

问题是当按下 CtrlShiftAlt 时,Windows 不会触发 keydown 事件。相反,该事件在释放键时触发。但是,在 Mac 上,一切都按预期工作(按下键时会触发 keydown)

关于鼠标移动事件的相同问题。 event.shiftKey 只有在您按住 Shift 并触发 mousedown 后才会为真...

是否有任何解决方法?这是一个例子:https://jsfiddle.net/ecz0deqw/4/

document.onkeydown = function (e) {
    addText('Key pressed: ' + e.key) 
};
document.onmousemove = function (e) {
    if(e.shiftKey)
        addText('ShiftMove');
   else {
       addText('NoShift')
   }
} 
function addText(text) {
    var newP = document.createElement("p"); 
    newP.innerText = text;
    document.body.insertBefore(newP,document.body.childNodes[0]);
}

谢谢/埃里克

【问题讨论】:

  • 尝试在document.body而不是document上添加事件,并使用addEventListener()这样做
  • 根据keydown specspec regarding "modifier keys",应该引发keydown事件。
  • 感谢您回复我!没有区别,这些键的事件仍然在 Windows 上的“keyup”而不是“keydown”上触发。 jsfiddle.net/ecz0deqw/7
  • 我刚刚在我的 Windows 机器上尝试了您的代码,它的行为符合预期。事件在按键按下时触发。您的系统上一定有一些不同的地方。

标签: javascript keyboard-events


【解决方案1】:

您的 Windows 机器是虚拟机吗? Parallels(至少)用修饰键做了一些有趣的事情。

Actions > Configure 下转到Mouse & Keyboard 选项卡。在Keyboard 标签旁边,选择Optimize for games

Parallels 在该选项下方指出:“当键盘针对游戏进行了优化时,修饰键会变得更加灵敏。”

【讨论】:

  • 非常感谢,现在事件在 keydown 时触发。 Shiftdown 仍然需要在 mouseDown 事件之前发生,我才能检测到它(正版 Windows 安装)
  • 天啊,我正在开发一个使用 keydown + 修饰键的电子应用程序。我在 Parallels 上进行测试,对此我感到很疯狂。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 2013-08-21
  • 1970-01-01
相关资源
最近更新 更多