1 回答

TA贡献2016条经验 获得超9个赞
首先,就算同时按下两个键,也会有一点时间误差而不是真的同时,一定是一先一后。所以按下 enter,再按下ctrl,会触发两个 keydown 事件,其 keyCode 分别是 13 和 17。
现在你可以按往 ctrl 不放,再按其它键,它们都会触发 keydown 等事件,而现在这些事件的 e.ctrlKey 就是 true 了。
keydown 事件之后,你可以设置一个标志变量,比如
let isUpPressing = false;
xxxx.on("keydown", e => {
if (e.keyCode === 38) {
isUpPressing = true;
}
});
现在,只要你没改变这 isUpPressing 的值,它就始终下于 up 键按下的状态,虽然有可能 up 键已经放开了。当然在这个状态下你再按其它键,就可以用一堆变量来组合复合状态了。
刚才说了,up 放开了,但 isUpPressing 仍然是 true,所以我们需要处理这个问题,当然是用 keyup 事件来解决
xxxx.on("keyup", e => {
if (e.keyCode === 38) {
isUpPressing = false;
}
});
小键盘的 0 到 9 对应的 keyCode 是 96 到 105。不过貌似没有区分小键盘上的功能键。
添加回答
举报