Следующий 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;
CSS для #leftPaddle выглядит следующим образом:
#leftPaddle {
position:absolute;
left:0;
top:0;
width:8px;
height:48px;
background-color:#BADA55;
border:1px solid #000;
}
Скрипка, чтобы увидеть это в действии.
-Bonus прохладные очки. Если я создаю бесконечный цикл, jsFiddle не может загрузить и заморозить браузер. Это проблема для скрипки?
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);