KeyboardState..prompt或alert后总是为true -为什么?
KeyboardState.pressed is always true after .prompt or alert - Why?
正如标题所说,我尝试过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
。在这里和这里阅读更多(ctrl+f : auto-repeat)
。
这是一个针对你具体问题的建议解决方案:
。当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 = {};
})
我想知道它是否与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);
只需将此添加到KeyboardState.js中的onKeyDown
开头:
if (event.repeat) return;
相关文章:
- 为什么当async标志设置为false时,xmlhttprequest中的代码可以工作,而当它设置为true时却不能工作
- 为什么-0===0的求值结果为true
- 为什么控制台.log(true,' ')打印真“ ”
- 使用!而in运算符在应该为true时返回false,为什么
- 为什么 javascript 返回对象位置 true 或 false
- 为什么 1.2 == true 返回 false 如果布尔值 (1.2) 实际上是真的
- 为什么 isNaN 总是返回 true
- 在 JavaScript 中,为什么 []==false 为 true
- 为什么我的html节点保持类ng隐藏属性ng show=true
- 为什么asp:LinkButton服务器端事件没有'当clientClick返回true时,t激发
- 阻止表单提交 javascript 为什么有一个明显的错误语句返回 true
- 为什么只有当我在字符串周围输入引号时,表单输入的isNaN才为true
- 为什么在我的javascript中没有正确推送是true
- 为什么(true>null)在JavaScript中总是返回true
- 为什么innerHTML在和相同的字符串值比较时不返回true
- 为什么布尔(true)&&string是javascript中的字符串
- JavaScript:为什么boolean总是返回true
- AngularJS-为什么不;t替换:true使用templateUrl属性
- 空数组在比较时返回 false,但在单独返回 true 时返回 true.为什么这样
- KeyboardState..prompt或alert后总是为true -为什么?