故事是一个坠落的气球。如果您设法单击气球(“停止”功能),您将获胜。否则,如果下降450像素,您将输掉。
问题是当我按下气球时:它更改了src,提醒我并清除clearInterval-现在我认为它将停止或等待下一个事件。 但是,在警报上单击“确定”后,警报持续下降...
我的代码:
function Start() {
num = Math.floor(Math.random() * 501);
document.getElementById("balon").style.left = num + 'px';
var id = setInterval(function() {
if (posX > 450 && ok) {
alert("Looser");
clearInterval(id);
} else {
posX += Vpos * dt;
document.getElementById("balon").style.top = posX + 'px';
}
}, dt);
}
function Stop() {
document.getElementById("balon").src = 'JS Pics/balon2.gif';
alert("Winner");
clearInterval(id);
}
最后,我找到了一种通过添加Bool变量来停止它的方法。见下文: 无论如何,我不确定为什么会发生这种情况(很乐于解释)或采用其他方法来解决此问题。感谢。
function Start() {
num = Math.floor(Math.random() * 501);
document.getElementById("balon").style.left = num + 'px';
var id = setInterval(function() {
if (posX > 450 && ok) {
alert("Looser");
clearInterval(id);
} else {
if (ok) {
posX += Vpos * dt;
document.getElementById("balon").style.top = posX + 'px';
} else {
clearInterval(id);
}
}
}, dt);
}
function Stop() {
ok = false;
document.getElementById("balon").src = 'JS Pics/balon2.gif';
alert("Winner");
clearInterval(id);
}
答案 0 :(得分:1)
id
在Start
函数的范围内,因此在Stop
函数的范围内未定义。
您可以在两个函数之外声明它,以便它们都可以访问它:
var id;
function Start() {
num = Math.floor(Math.random() * 501);
document.getElementById("balon").style.left = num + 'px';
id = setInterval(function () {
if (posX > 450 && ok) {
alert("Looser");
clearInterval(id);
}
else {
posX += Vpos * dt;
document.getElementById("balon").style.top = posX + 'px';
}
}, dt);
}
function Stop() {
document.getElementById("balon").src = 'JS Pics/balon2.gif';
alert("Winner");
clearInterval(id);
}
您对ok
的修复有效,因为您没有使用关键字var
进行声明,因此将其分配给window
对象(或者您在外部范围中声明了它,却忘记了附加在代码段中)。