空间紧迫时的事件,只有一次

时间:2017-03-31 20:56:56

标签: javascript jquery keycode

我有一些问题:我有这个:(在一个函数中......)

var space = 0;

setInterval(space, 20);
var keys = {}

$(document).keydown(function(e) {
    keys[e.keyCode] = true;
});

$(document).keyup(function(e) {
    delete keys[e.keyCode];
});

function space() {
    for (var direction in keys) {
        if (!keys.hasOwnProperty(direction)) continue;
        if (direction == 32) {
                space++;
                console.log(space);
            }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

32 ==空格键,但我在控制台中看到空格被按下3次(空格== 3),键盘按键和键控(我认为),当空间是空的时候我怎么能只有“空格= 1”压了?

2 个答案:

答案 0 :(得分:0)

似乎正在发生的事情是,由于它每隔20毫秒运行一次,当您按住空格键时,空间功能会不断递增计数。我添加了一个标志,以防止另一个执行,直到该键被释放,它工作正常。真的,您应该只使用按键事件并检查keyCode === 32是否跟踪您的计数。将会发生更少的事件。如果你想看看发生了什么,你可以注释掉标志并检查控制台。

var spaceCount = 0;
var running = false;
var keys = {}

$(document).keydown(function(e) {
  console.log("keycode", e.keyCode);
  keys[e.keyCode] = true;
});

$(document).keyup(function(e) {
  console.log("keyup")
  delete keys[e.keyCode];
  running = false;
});

function space() {
  if(running) return;
  for (var direction in keys) {
    running = true;
    console.log(direction);
    if (!keys.hasOwnProperty(direction)) continue;
    if (direction == 32) {
      spaceCount++;
      console.log("count: " + spaceCount);
      console.log(keys);
    }
  }
}

setInterval(space, 20);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 1 :(得分:0)

我希望这会有所帮助:

var space = 0; 
    var keys = {};
    var keys2 = {};

$(document).keydown(function(e) {
    keys[e.keyCode] = true;
});

$(document).keyup(function(e) {
    keys[e.keyCode] = false;
});

setInterval(function(){spacing()}, 20); 

function spacing() {

    if (keys[32] && !keys2[32])
        {
            space++;
            keys2[32] = true;
        }
        else if(!keys[32])
        {
            keys2[32] = false;
        }

console.log(space);
 }