Javascript KeyboardState.pressed在之后始终为真。提示或警报-为什么?
正如标题所说,我尝试了THREEx和Stemkovskis standalone KeyboardState.js,但它们似乎都没有正确更新 这是我的代码:Javascript KeyboardState.pressed在之后始终为真。提示或警报-为什么?,javascript,keyboard,alert,prompt,Javascript,Keyboard,Alert,Prompt,正如标题所说,我尝试了THREEx和Stemkovskis standalone 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键
m_vKeyboard = new THREEx.KeyboardState();
// m_vKeyboard.update(); // if using stemkovskis
if (m_vKeyboard.pressed("F")) {
alert("And now it is always true!");
}
单击F键一次,将其释放;警报窗口弹出,单击“确定”,它将永远再次弹出。为什么会这样?我想知道它是否与alert()作为阻塞调用有关。使用下面的代码给我同样的问题。如果我注释掉alert()并取消注释console.log(),它似乎可以正常工作。但是,我不确定这是否有助于解决您的问题
var m_vKeyboard = new THREEx.KeyboardState();
setInterval(function () {
var key = "F";
var pressed = m_vKeyboard.pressed(key);
alert("And now it is always true!");
//console.log("key", key, "pressed", pressed);
}, 100);
许多浏览器重复
键下操作
。阅读更多信息并(ctrl+f:自动重复)
以下是针对您的具体问题提出的解决方案:
A.当keydown
将其状态存储为某个数组中的true
,并在keydup
上将其设置为false
wasPressed['F'] = true; //on keydown
wasPressed['F'] = false; //on keyup
B.检查下一个键时,也要检查其状态
if (m_vKeyboard.pressed("F") && !wasPressed['F'])
寻求全面实施:
更新
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 = {};
})
只需将此添加到KeyboardState.js中的onKeyDown
开头:
if (event.repeat) return;
有人知道如何解决这个问题吗?是的,评论它解决了“总是”的真正问题。但是,我想使用promt让用户插入一个INT值以在算法中使用。也许还有其他方法?是的,使用alert()、prompt()和confirm()是有问题的。您不能使用jQuery或其他库进行提示,这样您就不会调用阻塞类型函数了吗?我的问题是,我无法让网页的其余部分在后台滚动,因此需要进行阻塞调用。我恐怕:/I我还没有尝试过您的解决方案,但我认为它不会起作用。因为当我点击“F”时,我使用了锁定代码的提示符(也就是当我释放“F”时,它不会触发onKeyUp),所以它总是正确的。我看过你的代码,它是如何检查键盘上的按钮当前是否按下的?我尝试了使用提示符(请参见更新),它工作得很好。当然,它工作得很好,你可以将布尔值设置为true(我现在就是这样解的)。如果在关闭提示后第二次单击F会发生什么情况?虽然有效,但感觉是一种廉价的方式;)干杯!现在需要一个解决方案!我知道!这确实是一个廉价的解决办法。但对于快速解决方案,它似乎是最好的!:)