我有以下功能,
Render: function (level, cpi, t1)
{
//...
if ((level.t0.value -= (t1 - this.t0) / 1000) <= 0) {
alert("Game over!");
window.location.href = "levels.php";
}
//...
}
通过
进行了大量调用(function frame ()
{
//...
Level.Render(level, cpi, Date.now());
//...
requestAnimationFrame(frame);
})();
如果第二个陈述变为真,则会显示对话框,如果我点击&#34;确定&#34;,它会再次出现,再次出现......没有重定向,为什么?
答案 0 :(得分:0)
我收到了错误:
作业中的左侧无效
这对你有用吗?
level.t0.value -= (t1 - this.t0) / 1000;
if (level.t0.value <= 0) {
alert("Game over!");
window.location.href = "levels.php";
}
答案 1 :(得分:0)
JavaScript代码在单个线程中执行,浏览器不会开始重新加载页面(基于新URL),直到JS完成执行(例如响应事件等)。
更糟糕的是,不同浏览器的行为方式不同。例如,下次在更改alert()
后在Firefox中打开windows.location
时,浏览器将获取更改并重新加载页面(并自动关闭alert()框)。另一方面,Chrome执行alert()
时不会立即获取位置更改。
TL; DR :不要尝试将window.location赋值用作全局“退出”函数。如果您需要立即中断代码,可以在更改位置后抛出错误:
Render: function (level, cpi, t1)
{
//...
if ((level.t0.value -= (t1 - this.t0) / 1000) <= 0) {
alert("Game over!");
window.location.href = "levels.php";
throw("Done");
}
//...
}