在.prompt或alert之后,KeyboardState.pressed总是为true - 为什么?

时间:2014-05-28 12:30:46

标签: javascript keyboard alert prompt

正如标题所说,我已经尝试了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键一次,将其释放;警告窗口弹出,单击确定,它会再次弹出所有永恒。怎么样?

3 个答案:

答案 0 :(得分:1)

我想知道它是否与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);

答案 1 :(得分:1)

许多浏览器重复keydown。阅读更多herehere (ctrl+f : auto-repeat)

以下是针对您的具体问题的建议解决方案:

一个。当keydown在某个数组中将其状态存储为true并在keyup上将其设为假时。

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  = {};
    })

答案 2 :(得分:0)

只需将其添加到KeyboardState.js中 onKeyDown 的开头:

&#xA;&#xA;
  if(event.repeat)return;& #xA;  
&#XA;