Javascript 按下numpad时释放Shift键
添加键盘侦听器:Javascript 按下numpad时释放Shift键,javascript,keyboard-events,Javascript,Keyboard Events,添加键盘侦听器: document.addEventListener("keydown", e=>console.log('keydown', e.code), true); document.addEventListener("keyup", e=>console.log('keyup', e.code), true); 按Shift+Num1: keydown ShiftLeft keyup ShiftLeft keydown Numpad1 keyup Numpad1 key
document.addEventListener("keydown", e=>console.log('keydown', e.code), true);
document.addEventListener("keyup", e=>console.log('keyup', e.code), true);
按Shift+Num1:
keydown ShiftLeft
keyup ShiftLeft
keydown Numpad1
keyup Numpad1
keydown ShiftLeft
keyup ShiftLeft
为什么在发送numpad键之前不进行移位?这是一个Chrome bug吗
document.addEventListener(“keydown”,e=>console.log('keydown',e.code,e.shiftKey)),true;
document.addEventListener(“keyup”,e=>console.log('keyup',e.code,e.shiftKey)),true代码>似乎Shift会覆盖Windows中的numlock并导致这种行为。铬与此无关
此行为是windows的一项功能/怪癖
如果要捕获shift numpad事件,可以执行以下操作:
释放shift键时保存时间戳
在您的按键事件中,检查这是多久以前的事了。如果小于50毫秒左右,则很可能是用户按下了shift+numpad键(而不是箭头键)
让iShiftReleaseTime;
$(文档).keyup(函数(e){
如果(e.keyCode==16)//移位键
iShiftReleaseTime=Date.now();
});
$(文档).keydown(函数(e){
如果((Date.now()-iShiftReleaseTime)<50){
如果(e.keyCode==45)console.log(“按下Shift+Numpad 0”);
如果(e.keyCode==35)console.log(“按下Shift+numpad1”);
如果(e.keyCode==40)console.log(“按下Shift+numpad2”);
如果(e.keyCode==34)console.log(“按下Shift+numpad3”);
如果(e.keyCode==37)console.log(“按下Shift+Numpad 4”);
如果(e.keyCode==12)console.log(“按下Shift+numpad5”);
如果(e.keyCode==39)console.log(“按下Shift+Numpad 6”);
如果(e.keyCode==36)console.log(“按下Shift+Numpad 7”);
如果(e.keyCode==38)console.log(“按下Shift+Numpad 8”);
如果(e.keyCode==33)console.log(“按下Shift+numpad9”);
}
否则{
如果(e.keyCode==37)console.log(“按下了左箭头键”);
如果(e.keyCode==38)console.log(“按下了向上箭头键”);
如果(e.keyCode==39)console.log(“按了右箭头键”);
如果(e.keyCode==40)console.log(“按下向下箭头键”);
//等等。。。
}
});
您需要检查e.shiftKey
以捕捉组合。我不知道为什么它先进行键控。它是false
。顺便说一下,key
被设置为End
,所以它为我做了一些奇怪的翻译。我只想处理shift+num1…e。当我按下shift+num1时,shiftKey
对我来说是真的。我刚刚测试过。我似乎无法复制这种行为,而且我也在使用Chrome,这可能是你键盘上的东西吗?(Chrome 73.0.3683.86版)你试过使用numlock吗?
let iShiftReleaseTime;
$(document).keyup(function (e) {
if(e.keyCode == 16) //shift key
iShiftReleaseTime = Date.now();
});
$(document).keydown(function (e) {
if ((Date.now() - iShiftReleaseTime) < 50) {
if (e.keyCode == 45) console.log("Shift + Numpad 0 was pressed");
if (e.keyCode == 35) console.log("Shift + Numpad 1 was pressed");
if (e.keyCode == 40) console.log("Shift + Numpad 2 was pressed");
if (e.keyCode == 34) console.log("Shift + Numpad 3 was pressed");
if (e.keyCode == 37) console.log("Shift + Numpad 4 was pressed");
if (e.keyCode == 12) console.log("Shift + Numpad 5 was pressed");
if (e.keyCode == 39) console.log("Shift + Numpad 6 was pressed");
if (e.keyCode == 36) console.log("Shift + Numpad 7 was pressed");
if (e.keyCode == 38) console.log("Shift + Numpad 8 was pressed");
if (e.keyCode == 33) console.log("Shift + Numpad 9 was pressed");
}
else {
if (e.keyCode == 37) console.log("left arrow key was pressed");
if (e.keyCode == 38) console.log("up arrow key was pressed");
if (e.keyCode == 39) console.log("right arrow key was pressed");
if (e.keyCode == 40) console.log("down arrow key was pressed");
//etc...
}
});