JavaScript 移动延迟和多次击键

标签 javascript keycode

这是我的问题:http://testepi.kvalitne.cz/test/

我不希望按键和方 block 移动之间有延迟。我还想知道如何对 Angular 移动(同时按两个键)。

我的代码:

$(function(){

document.addEventListener("keydown", move, false);

var x = 0;
var y = 0;

function move(event){
  if(event.keyCode==37){
        x -= 10;
  $("#square").css("left", x);
  }

  if(event.keyCode==39){
        x += 10;
  $("#square").css("left", x);
  }

  if(event.keyCode==38){
        y -= 10;
  $("#square").css("top", y);
  }

  if(event.keyCode==40){
        y += 10;
  $("#square").css("top", y);
  }

}

});

最佳答案

首先,为了避免按键/重复延迟,您必须将程序包装在一个循环中,并使键盘的状态在该循环的范围内可用,其次,为了监视多个按键,您需要跟踪各个按键keydown 和 keyup 事件:

var x = 0;
var y = 0;

// store the current pressed keys in an array
var keys = [];

// if the pressed key is 38 (w) then keys[38] will be true
// keys [38] will remain true untill the key is released (below)
// the same is true for any other key, we can now detect multiple
// keypresses
$(document).keydown(function (e) {
    keys[e.keyCode] = true;
});

$(document).keyup(function (e) {
    delete keys[e.keyCode];
});
// we use this function to call our mainLoop function every 200ms
// so we are not relying on the key events to move our square
setInterval( mainLoop , 200 );

function mainLoop() {
     // here we query the array for each keyCode and execute the required actions
     if(keys[37]){
        x -= 10;
        $("#square").css("left", x);
     }

     if(keys[39]){
        x += 10;
        $("#square").css("left", x);
     }

     if(keys[38]){
        y -= 10;
        $("#square").css("top", y);
     }

     if(keys[40]){
        y += 10;
        $("#square").css("top", y);
     }
}

关于JavaScript 移动延迟和多次击键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26280708/

相关文章:

javascript - 如何在 Javascript 中最佳地交错相同固定 N 长度的 K 个数组

javascript - 处理不同页面之间代码重复的正确方法

java - 获取字符的unicode值

javascript - 相当于链接到字体文件的 JS

javascript - IE 的 toLocaleString 在结果中有奇怪的字符

javascript - jQuery/JS 键码 : Several keycodes in one IF statement

android - 如何将键码转换为字符或字符串?

javascript - 如何在捕获输入键码 ('13' 后触发另一个键码)?

javascript - 使用 Javascript 动态移动元素位置

javascript - Dropzone JS - 销毁并重新创建相同的表单