如何修复javascript keydown中的延迟
How to fix delay in javascript keydown
可能重复:
JavaScript移动延迟和多次按键
我是新手,正在学习HTML5画布和javascript。我创建了一个向左和向右移动对象的事件,我的问题是每当你按住键或切换到另一个键时都会出现延迟。我知道下面的代码不见了,请帮帮我。提前谢谢。
c.addEventListener('keydown',this.check,true);
function check(el) {
var code = el.keyCode || el.which;
if (code == 37 || code == 65){
x -=1;
}
if (code == 39 || code == 68){
x += 1;
}
el.preventDefault();
}
与其试图直接对keydown事件做出反应,我建议您使用keydown和keyup事件来维护当前已关闭的键的列表。然后实现一个"游戏循环",每x毫秒检查一次哪些键按下,并相应地更新显示。
var keyState = {};
window.addEventListener('keydown',function(e){
keyState[e.keyCode || e.which] = true;
},true);
window.addEventListener('keyup',function(e){
keyState[e.keyCode || e.which] = false;
},true);
x = 100;
function gameLoop() {
if (keyState[37] || keyState[65]){
x -= 1;
}
if (keyState[39] || keyState[68]){
x += 1;
}
// redraw/reposition your object here
// also redraw/animate any objects not controlled by the user
setTimeout(gameLoop, 10);
}
gameLoop();
你会注意到,这可以让你同时处理多个键,例如,如果用户同时按下向左和向上箭头,那么当按下一个键时,后续键按下事件之间的延迟问题就会消失,因为你真正关心的只是是否发生了键按下。
我意识到你可能没有实现一个游戏,但这个"游戏循环"概念应该适用于你,如这个非常简单的演示所示:http://jsfiddle.net/nnnnnn/gedk6/
相关文章:
- 可以简化嵌套的延迟Q Promises解析吗
- 使用特定键在keydown时触发事件
- 使用regex的jquery keydown绑定不会验证撇号和句点
- onclick函数需要双击,因为类分配延迟
- 更多延迟动画
- 对父作用域的指令更新延迟了一步
- 为JS函数添加延迟
- 带有延迟的循环每次应运行5次
- 关键帧之间的css3动画延迟
- 如何在有延迟的情况下对两个代码进行积分
- JQuery.on(“keydown”)追加到页面时不工作
- KeyPress和Keydown在这个特定的代码上不起作用.只有key-up起作用
- 如何为.css状态的更改添加延迟
- Angular.js延迟控制器初始化
- 阻止浏览器对keydown事件作出反应,但不取消该事件
- 在延迟时设置Whois脚本
- 如何在Javascript中延迟setInterval
- 如何在一个元素动画之后延迟
- 如何修复javascript keydown中的延迟
- 如何使用jQuery避免keydown延迟