Javascript 即使用户处于不同的选项卡中,window.setTimeout也需要工作
因此,我正在制作一款游戏,它可以随着时间的推移获得积分,即使用户并没有真正关注游戏运行的窗口。我在javascript中使用setTimeout()和requestAnimationFrame()函数,遇到了一个问题Javascript 即使用户处于不同的选项卡中,window.setTimeout也需要工作,javascript,jquery,focus,settimeout,requestanimationframe,Javascript,Jquery,Focus,Settimeout,Requestanimationframe,因此,我正在制作一款游戏,它可以随着时间的推移获得积分,即使用户并没有真正关注游戏运行的窗口。我在javascript中使用setTimeout()和requestAnimationFrame()函数,遇到了一个问题 //main game loop var FPS = 30; tick(); function tick() { setTimeout(function() { window.requestAnimationF
//main game loop
var FPS = 30;
tick();
function tick() {
setTimeout(function() {
window.requestAnimationFrame(tick);
//draw everything
draw();
//do stuff
...stuff...
}, Math.round(1000/FPS));
}
我遇到的问题只有在用户关注其他选项卡时才会出现。如果窗口被收起,或者如果另一个窗口在上面,游戏仍然运行。这告诉我它与操作系统无关,而与浏览器无关。我发现它在浏览器中也是通用的。我需要游戏运行,即使玩家正在使用另一个标签,我如何做到这一点?如果有一个特定于更改选项卡的事件,或者如果有一个替代的、可靠的计时器功能,那就好了
提前感谢:)下面是一个示例web worker,当选项卡被隐藏时,它将每秒运行一次以上。不幸的是,并非所有浏览器都支持web Worker
var blob = new Blob([
"onmessage = function(e) { setTimeout(function(){postMessage('draw now'); },100)}"]);
// Obtain a blob URL reference to our worker 'file'.
var blobURL = window.URL.createObjectURL(blob);
var worker = new Worker(blobURL);
worker.onmessage = function(e) {
draw();
worker.postMessage('start timer');
};
worker.postMessage('start timer'); // Start the worker.
这里的工作示例。打开控制台以观察计数增量,即使您的选项卡处于隐藏状态
浏览器在隐藏选项卡时将setTimeout调用限制为每秒最多1次,以最大限度地提高活动选项卡上的性能:如果目标浏览器支持web worker,则可以在web worker中运行超时功能并绕过此限制。