Javascript setInterval在第二次调用后不停止
我目前正在研究一个作战系统。 健康度每200ms计算一次,我使用的是间隔时间。在我再次开始比赛之前,这一切都很好。它不再停止 这是很多代码-我也有一个在线现场演示在这里 就像我说的-第一个有效,但第二个无效 因此,只需输入主代码:Javascript setInterval在第二次调用后不停止,javascript,jquery,setinterval,Javascript,Jquery,Setinterval,我目前正在研究一个作战系统。 健康度每200ms计算一次,我使用的是间隔时间。在我再次开始比赛之前,这一切都很好。它不再停止 这是很多代码-我也有一个在线现场演示在这里 就像我说的-第一个有效,但第二个无效 因此,只需输入主代码: var frameStop; // Draws Startscreen function showStartRaid(name) { playerBTC = btc; player
var frameStop;
// Draws Startscreen
function showStartRaid(name) {
playerBTC = btc;
playerBTCs = btcs;
playerName = nick;
// Sets stats for called level
enemyBTC = dun[name]["buyer"]["btc"];
enemyBTCs = dun[name]["buyer"]["btcs"];
enemyName = dun[name]["buyer"]["label"];
enemyNum = dun[name]["meta"]["base"];
/* Reset everything in html */
}
var battle = false;
$(".raid_building").click(function() {
//Draws level
showStartRaid(name);
//Sets start BTC as fighting stats (they will decrease during battle)
fplayerBTC = playerBTC;
fenemyBTC = enemyBTC;
//Click on "Start"
$("#startRaid").click(function() {
function raiden() {
//Calculates fighting
fenemyBTC -= playerBTCs/frameMinus;
fplayerBTC -= enemyBTCs/frameMinus;
/*Draws stats and health here in html */
if(fplayerBTC >= 0 && fenemyBTC >= 0)
console.log("battle goes on")
else {
//If battle is over, stop it
clearInterval(frameStop);
}
}
//Start battle
frameStop = setInterval(raiden, frameRaid);
});
});
谢谢你的帮助,我很无助。有了你的代码,每次点击.raid\u building
,你都会连接一个新的处理程序来点击\startRaid
。这意味着,如果两次单击.raid\u building
,您将有两个处理程序用于单击#startRaid
,这两个处理程序都将启动一个新的间隔计时器。frameStop
变量将只包含其中一个的句柄;另一个将继续。当然,第三次单击会使问题复杂化(您将有三个click
处理程序,每个处理程序都会触发一个新的间隔计时器)。等等
将#startRaid
上的代码挂接点击
移动到.raid#u building
上的点击处理程序外部使用您的代码,每次点击.raid#startRaid
时,您都会挂接一个新的点击处理程序。这意味着,如果两次单击.raid\u building
,您将有两个处理程序用于单击#startRaid
,这两个处理程序都将启动一个新的间隔计时器。frameStop
变量将只包含其中一个的句柄;另一个将继续。当然,第三次单击会使问题复杂化(您将有三个click
处理程序,每个处理程序都会触发一个新的间隔计时器)。等等
将#startRaid
上的代码挂接点击
移动到.raid#u building
上的点击处理程序外部使用您的代码,每次点击.raid#startRaid
时,您都会挂接一个新的点击处理程序。这意味着,如果两次单击.raid\u building
,您将有两个处理程序用于单击#startRaid
,这两个处理程序都将启动一个新的间隔计时器。frameStop
变量将只包含其中一个的句柄;另一个将继续。当然,第三次单击会使问题复杂化(您将有三个click
处理程序,每个处理程序都会触发一个新的间隔计时器)。等等
将#startRaid
上的代码挂接点击
移动到.raid#u building
上的点击处理程序外部使用您的代码,每次点击.raid#startRaid
时,您都会挂接一个新的点击处理程序。这意味着,如果两次单击.raid\u building
,您将有两个处理程序用于单击#startRaid
,这两个处理程序都将启动一个新的间隔计时器。frameStop
变量将只包含其中一个的句柄;另一个将继续。当然,第三次单击会使问题复杂化(您将有三个click
处理程序,每个处理程序都会触发一个新的间隔计时器)。等等
将
#startRaid上的代码挂钩单击
移动到上的单击处理程序外部
raid\U building
我还想补充一点,您可以将其留在内部,但可以执行一个.off('click')。打开('click'
,虽然我不推荐它。@Adammerfield:的确,这是很好的观点。有时这正是你想要的。可能不在这里,但仍然…我还想补充一点,你可以把它放在里面,但可以关闭('click')。打开('click',虽然我不推荐它。@Adammerfield:的确,这是很好的观点。有时这正是你想要的。可能不在这里,但仍然…我还想补充一点,你可以把它放在里面,但可以关闭('click')。打开('click',虽然我不推荐它。@Adammerfield:的确,这是很好的观点。有时这正是你想要的。可能不在这里,但仍然…我还想补充一点,你可以把它放在里面,但可以关闭('click')。打开(“单击”,尽管我不推荐它。@Adammerfield:的确,这是一个很好的观点。有时这正是你想要的。可能不在这里,但仍然。。。