Javascript 热键组合don';如果做得快,就不能工作
我正在尝试为web应用程序创建热键,例如Ctrl+z执行撤消功能 似乎当我快速按下按键时(因为我已经习惯了经常使用桌面应用程序),它不会注册。单按键注册,但由于某种原因,它错过了组合 据我所知,你必须通过按键事件跟踪哪些按钮被按下,这就是我下面所做的 请尝试下面的代码。点击Z输出Javascript 热键组合don';如果做得快,就不能工作,javascript,events,input,keyboard,hotkeys,Javascript,Events,Input,Keyboard,Hotkeys,我正在尝试为web应用程序创建热键,例如Ctrl+z执行撤消功能 似乎当我快速按下按键时(因为我已经习惯了经常使用桌面应用程序),它不会注册。单按键注册,但由于某种原因,它错过了组合 据我所知,你必须通过按键事件跟踪哪些按钮被按下,这就是我下面所做的 请尝试下面的代码。点击Z输出Z。按CTRL键,然后按Z键慢慢输出CTRL+Z。按CTRL键然后按Z键可快速输出Z。当我在windows记事本中以相同的速度执行操作时,它几乎每次都能完美地工作 使用e.ctrlKey检查ctrl是否为向下键而不是变
Z
。按CTRL键,然后按Z键慢慢输出CTRL+Z
。按CTRL键然后按Z键可快速输出Z
。当我在windows记事本中以相同的速度执行操作时,它几乎每次都能完美地工作
使用e.ctrlKey检查ctrl是否为向下键而不是变量,只需在keydown上检查热键组合,在KEYUP上不执行任何操作
var ctrlPressed=false, altPressed=false;
window.addEventListener("keydown", function (e) {
hotkey = e;
if (e.keyCode == 17) ctrlPressed = true;
if (e.keyCode == 18) altPressed = true;
e.preventDefault();
});
window.addEventListener("keyup", function (e) {
hotkey = window.event;
if (e.keyCode == 17) ctrlPressed = false;
if (e.keyCode == 18) altPressed = false;
if (e.keyCode == 90){
if (altPressed && ctrlPressed && e.keyCode == 90)
addText('ALT + CTRL + Z');
else if (ctrlPressed && e.keyCode == 90)
addText('CTRL + Z');
else
addText('Z');
}
});
//meaningless, just adds text to doc so you can see it
function addText(text) {
var theDiv = document.getElementById("output");
theDiv.appendChild(document.createElement("br"));
var content = document.createTextNode(text);
theDiv.appendChild(content);
}
function KeyPress(e) {
var evtobj = window.event? event : e
if (evtobj.keyCode == 90 && evtobj.ctrlKey) addText("CTRL + Z");
else if (evtobj.keyCode == 90) addText("Z");
}
document.onkeydown = KeyPress;