我所拥有的是一个与 keydown 事件相关联的元素。
类似问题的答案都指向 clearInterval,我无法开始工作。
首先,我使用 keyup 事件来检查正在按下哪个箭头键:
var counter = 0;
var yPosArray = [];
var right = true;
var done = false;
var leftX;
var rightX;
$(document).keydown (function(e)
{
rightX = parseInt(($('#movingObject').css('left')).replace('px','')) + 50;
leftX = parseInt(($('#movingObject').css('left')).replace('px',''));
if(e.which == 39)// right
{
$('#movingObject').find('img').attr('src','assets/images/mario_right.png');
right = true;
$('#xRight').val(rightX);
$('#xLeft').val(leftX);
move();
}
if(e.which == 37) //left
{
$('#movingObject').find('img').attr('src','assets/images/mario_left.png');
right = false;
$('#xRight').val(rightX);
$('#xLeft').val(leftX);
move();
}
if(e.which == 38) //up
{
if($('#movingObject').css('bottom') == '0px' && !false)
{
done = true;
gravity();
done = false;
}
}
});
如上所示,当满足此条件时,将调用e.which == 37
该方法。move()
move 方法的作用,如下所示,是增加元素的left
style 属性。我有一个计时器的原因是速度随着时间的推移而增加,但是当按键被释放时,事件应该停止触发。因此,我想调用上一个代码片段中看到的 keyup 事件。解释将在那里继续。
var speed = 0;
var maxspeed = 0;
var timer;
function move()
{
var counter = 0;
timer = setInterval(function ()
{
maxspeed++;
$('#movingObject').css('left', moveX + maxspeed + 'px');
++counter;
}, 70);
}
如上所示,定时器变量是在move
函数创建之前声明的,它被设置为setInterval
方法。因为变量位于根级别,如果有意义,它可以在所有函数中使用。
如下所示,我已经启动了 keyup 事件来检查不同的键。
$(document).keyup (function(e)
{
var posX = parseInt(($('#movingObject').css('left')).replace('px',''));
if(e.which == 39)// right
{
maxspeed = 0;
clearInterval(timer);
timer = 0;
}
if(e.which == 37) //left
{
maxspeed = 0;
clearInterval(timer);
timer = 0;
}
$('#movingObject').css('left', posX + 'px');
});
上面,我使用 clearInterval 并尝试设置timer
等于 0,之后它继续增加。
这是我所有代码结构的脚本。
任何想法为什么会发生这种情况?