我有这个代码:
else if (e.keyCode == 32){
fired = true;
在 keyDown 函数中(我添加了 document.addEventListener 代码)。现在它工作得很好,并且完全符合我的要求。但问题是:如果你按住这个键,它会一遍又一遍地不断地使 fire = true 直到它被释放。我只是想让它设置 fire = true; 一次,即使按键被按下。
我有这个代码:
else if (e.keyCode == 32){
fired = true;
在 keyDown 函数中(我添加了 document.addEventListener 代码)。现在它工作得很好,并且完全符合我的要求。但问题是:如果你按住这个键,它会一遍又一遍地不断地使 fire = true 直到它被释放。我只是想让它设置 fire = true; 一次,即使按键被按下。
编辑:现在每个浏览器都完全支持它。除了 Internet Explorer
如果浏览器兼容性不是您的主要关注点*,您可以尝试访问 的.repeat
属性,如下所述KeyboardEvent
:https :
//developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat
通过在你的处理函数中做这样的事情:
function keyDown (e) {
if (e.repeat) { return }
// do stuff here
}
您可以避免重复击键。
*:在MDN网站上说它可以在Firefox中运行,我在Chrome中成功使用过它,所以两大浏览器应该没有问题
var fired = false;
element.onkeydown = function() {
if(!fired) {
fired = true;
// do something
}
};
然后使用 onkeyup 事件
element.onkeyup = function() {
fired = false;
};
试试这个 :)
您可以通过简单地确定是否keydown
为真来确定脚本中的任何其他地方是否已关闭!您还可以在按键关闭时执行其他脚本,方法是将 替换为console.log();
您想要在按键关闭时关闭的任何内容。
请告诉我这是否可以改进。
var keydown = false;
window.addEventListener('keydown', function() {
if (!keydown) {
keydown = true;
console.log('key down');
}
window.addEventListener('keyup', function() {
keydown = false;
});
});
上面的解决方案不考虑多次按键(想象一个游戏,用户可以同时向上和向左按下,但都只需要触发一次)。我需要一个通用解决方案来禁用所有键的多个 keyPress 上的重复键:
// create an array with 222 (number of keycodes) values set to true
var keyEnabledArray = Array(222).fill(true);
document.onkeydown = function(e){
// disable the key until key release
if(keyEnabledArray[e.keyCode]) {
keyEnabledArray[e.keyCode] = false;
}
};
document.onkeyup = function(e){
// enable the specific key on keyup
keyEnabledArray[e.keyCode] = true;
};
检查下面的片段:
使用keyup
事件。当他们的钥匙被提起时它会被触发。