我想使用快捷方式来处理Javascript(而非JQuery或任何Javascript库)中的任务。例如,我想使用Ctrl + Q编写警报。我的问题是仅使用Ctrl + Q,其他键(例如Ctrl + Q +其他键)的组合将无法处理警报。我该怎么办?
document.addEventListener('keydown', function(event){
if(event.ctrlKey && event.keyCode == 81) console.log('alert');
});
我只希望Ctrl + Q起作用,而不是Ctrl + Shift + Q,Ctrl + Alt + Q,Ctrl + Q +(另一些键)
答案 0 :(得分:4)
只需确保没有按下其他三个修饰符:
document.addEventListener('keydown', function(event) {
if (event.ctrlKey && event.keyCode == 81 && !(event.shiftKey || event.altKey || event.metaKey)) console.log("alert");
});
答案 1 :(得分:0)
以下代码可以解决您的问题(更新代码):
document.addEventListener("keydown", function (event) {
var map = [];
onkeyup = function(e){
map.push(e.key);
console.log(map);
if(map.length == 2){
console.log("CTRL + Q was pressed",map.indexOf("q") > -1 && map.indexOf("Control") > -1)
}
onkeydown = function(e){
// console.log(map);
}
}
});
如果与 ctrl 一起按下任何其他按钮(例如, ctrl + shift + Q 或 ctrl + alt + q ),它返回 false !让我知道是否可以解决您的问题。干杯!
答案 2 :(得分:-1)
您需要跟踪用keydown
按下了哪些键以及用keyup
释放了哪些键,然后,当按下新键时,您将只检查Ctrl和Q目前正在下降。
类似的事情应该起作用:
var keysPressed = [];
function onPressOrRelease(event) {
if (event.type === "keydown") {
if (!keysPressed.includes(event.keyCode))
keysPressed.push(event.keyCode)
} else if (event.type === "keyup")
keysPressed.splice(keysPressed.indexOf(event.keyCode), 1);
let ctrlQPressed = keysPressed.includes(81) && keysPressed.includes(17) && !keysPressed.some(a => a !== 81 && a !== 17)
if (ctrlQPressed)
console.log("pressed");
}
document.addEventListener("keydown", onPressOrRelease);
document.addEventListener("keyup", onPressOrRelease);
您将要确保不要多次添加键,并且可能要清除焦点丢失的数组(由于使用控件,释放时可能会失去焦点)