如何使定时器也可以在后台运行

How to make timer that can run on background also?

本文关键字:后台 运行 也可以 何使 定时器      更新时间:2023-09-26

我正在开发rails,并编写了用于显示从00:00:00开始的计时器的javascript代码。

[注意:我有两个按钮启动停止,用于启动定时器和停止定时器]

函数timer(){var秒、分钟、小时;秒=0;最小值=0;hrs=0;秒++;如果(秒>=60){最小++;秒=0;}如果(最小>=60){小时++;最小值=0;}document.getElementById("hrs").innerHTML=小时;document.getElementById("min").innerHTML=min;document.getElementById("sec").innerHTML=秒;setTimeout(timer(),1000);}

现在,这在我的rails web应用程序中运行良好。但是,如果我重定向到另一个页面并返回到此页面,我将丢失计时器值。

在这里,我希望时钟在页面重定向后也能持续运行。

如何解决此问题?

获取时间戳。。。将其保存在某个位置,并将其作为变量传递给下一页

var start=new Date().getTime();

获取经过的时间

var currentMillisecondsPassed=new Date().getTime()-start;

将其转换为hh:mm:ss.msec或其他。。。

下一页只需要start值,有很多方法可以传递它。。php、js、get、post。。。。还有更多。

CCD_ 3对于定时器来说也是不精确的。

下面是一个使用querystring传递值的示例。。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>timer</title>
<script>
window.onload=function(){
 var pt=window.location.search.split('=')[1],
 e=document.body.childNodes,
 t=e[0],
 s=(pt*1||0),
 interval,
 ms2Time=function(a) {
  var ms=parseInt((a%1000)/100),
  s=parseInt((a/1000)%60),
  m=parseInt((a/(1000*60))%60),
  h=parseInt((a/(1000*60*60))%24);
  return (h<10?'0'+h:h)+':'+(m<10?'0'+m:m)+':'+(s<10?'0'+s:s)+'.'+ms;
 },
 Start=function(){
  s=new Date().getTime();
  interval=window.setInterval(getcurrent,100);
 },
 Stop=function(){
  window.clearInterval(interval);
  s=0;
 },
 getcurrent=function(){
  t.textContent=ms2Time(new Date().getTime()-s);
 },
 changepage=function(){
  window.location='?start='+s;
 };
 e[1].addEventListener('click',Start,false);
 e[2].addEventListener('click',Stop,false);
 e[3].addEventListener('click',changepage,false);
 if(pt&&pt!=0){
  interval=window.setInterval(getcurrent,100);
 }
}
</script>
</head>
<body><div id="timer"></div><button>start</button><button>stop</button><button>anotherpage</button></body>
</html>

正如我所说。。。您可以将起始值存储在任何位置。。。所以如果你有任何偏好。。。只要告诉我,我就可以更改u.的代码

因为您正在重定向,所以java脚本计时器不起作用。您应该使用系统时间。从页面重定向时,您可以从会话变量中获得一些帮助,以保存计时器启动时的时间戳。

您可以使用会话或cookie设置变量sec, min, hour的初始值。并将此文件包含在您希望计时器在后台运行的所有页面中。

function timer(){
sec++;
if(sec>=60){
min++;
sec=0;
}
if(min>=60){
hrs++;
min=0;
}
setTimeout(timer(), 1000);
}

并且只在显示计时器的页面中将值添加到DOM中。

尝试从服务器发送默认的secminhrs值,例如将它们保存在cookie中。