0

以下 jQuery 在 for 循环中:

$(document).one('keydown',function(e) {
    if( e.which === 90 && leftPosition + 50 <= maxHeight) {
        var newLeftPosition = (leftPosition + 1) + 'px';
        $("#leftPaddle").css({top:newLeftPosition});         
    }
});

对于每次迭代,如果按下 z 键,它应该触发一次。它第一次触发,但不会再次触发,除非您在循环完成后重新启动循环。我最初有以下内容,它也只触发了一次:

$(document).keydown(function(e){
  if(e.which === 90 && leftPosition + 50 <= maxHeight) {
        var newLeftPosition = (leftPosition + 1) + 'px';
        $("#leftPaddle").css({top:newLeftPosition});         
    }   
});   

第二个片段的缺点,除了它也只触发一次之外,它会停止循环,直到不再按下该键。

变量 leftPosition 设置在 for 循环中,并且应该更新每次迭代。它的声明和初始化如下:

var leftPosition = $("#leftPaddle").position().top;

#leftPaddle 的 CSS 如下:

#leftPaddle {
  position:absolute;
  left:0;
  top:0;
  width:8px;
  height:48px;
  background-color:#BADA55;
  border:1px solid #000;
}

小提琴,看看它在行动。

- 奖励酷点。如果我创建一个无限循环,jsFiddle 无法加载并冻结浏览器。这是一个小提琴问题吗?

4

1 回答 1

0

ShengSlogar 明白了。我没有将侦听器包装在 for 循环中,而是使用了 setInterval,如下所示:

setInterval(function() {
    $(document).one('keydown',function(e) {
      if( e.which === 90 && leftPosition + 50 <= maxHeight) {
          var newLeftPosition = (leftPosition + 1) + 'px';
          $("#leftPaddle").css({top:newLeftPosition});         
      }
    });
}, 1);
于 2013-11-10T02:11:36.507 回答