如标题所示,我尝试了THREEx和Stemkovskis独立的KeyboardState.js,但它们似乎都无法正确更新。
这是我的代码:
m_vKeyboard = new THREEx.KeyboardState();
// m_vKeyboard.update(); // if using stemkovskis
if (m_vKeyboard.pressed("F")) {
alert("And now it is always true!");
}
单击一次F键,然后释放它;弹出警报窗口,单击确定,它再次弹出所有永恒。怎么来的?
最佳答案
许多浏览器重复keydown
。阅读更多here和here (ctrl+f : auto-repeat)
。
这是针对您特定问题的建议解决方案:
A.当keydown
在某些数组中将其状态存储为true
并在keyup
上设置为false时。
wasPressed['F'] = true; //on keydown
wasPressed['F'] = false; //on keyup
B.在检查下一个
keydown
时,还要检查其状态。if (m_vKeyboard.pressed("F") && !wasPressed['F'])
查找完整的实现:Here
更新
var wasPressed = {};
if( keyboard.pressed('F') && !wasPressed['f'] ){
alert("F was pressed");
prompt("Enter data : ");
wasPressed['f'] = true;
}
更新2
keyboard.domElement.addEventListener('keydown', function(event){
wasPressed = {};
})
关于javascript - 在.prompt或alert之后,KeyboardState.pressed始终为true-为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23911666/