循环javascript计时器,忽略网页刷新

时间:2013-07-14 13:39:10

标签: javascript html

显然没有这方面的经验 - 我基本上拼凑了代码到目前为止。

我有潜在客户访问的演示网站 - 他们可以登录仪表板并基本上搞乱一切,一小时后,cron作业将恢复存储在服务器其他地方的数据库转储。

我遇到了这段代码,认为显示一个60-0的计时器是有用和体贴的,让访问者知道在网站重置之前多久。然后它从60开始。然而,在浏览器刷新时,计数器也是如此。我用CSS设置它的样式,因此它有一个信息标签,整个代码块从网站的仪表板进入HTML小部件。

我认为这可能不够复杂,无法处理浏览器刷新。有什么建议吗?

<style type="text/css">
#notice {font-size:150%; float:left; padding-right:10px;}
#time {font-size:150%;}
</style>

<script type="text/javascript">

   var m=60; /*this value may be edited to suit your requirements*/

   var s=0;
   var temp=m-1;

window.onload=function() {
   tenMinutes();
 }
function tenMinutes(){
   s--;
if(s<0) {
   s=59;
   m--;
 }
if(m==-1) {
   m=temp;
 }
if(m<10) {
   mins='0'+m;
 }
else {
   mins=m;
 }
if(s<10) {
   secs='0'+s;
 }
else {
   secs=s;
 }
   document.getElementById('time').firstChild.nodeValue=mins+':'+secs;
   cd=setTimeout('tenMinutes()',1000);
}
</script>
<div style="width:300px;">
<div id="notice">This Website will reset in:</div>
<div id="time">60:00</div></div>

3 个答案:

答案 0 :(得分:0)

由于您(显然)控制了cron作业,并说它每隔一小时执行一次,因此您可以使用JavaScript来计算time difference between now and the next hour

当然,这取决于服务器和访问者的时钟同步,就分钟/秒而言。请记住,时区有半小时的偏移等。

如果您希望它更精确,您需要有一些服务器端逻辑来存储下次重置的时间/日期。

您可以在应用程序代码中的某个位置执行此操作,也可以使用cronjob以适当的格式将时间信息写入文件。

答案 1 :(得分:0)

请记住,当用户告诉浏览器重新加载网页时,它与重新启动计算机基本相同。浏览器将从头开始重新加载整个页面,这也意味着它将从头开始执行任何javascript。没有任何办法可以避免这种情况。

如果你想避免这种情况,你必须找到一种方法来避免浏览器重新加载javascript,或者更好的是,使用持久性数据存储来存储数据,这些数据可以告诉浏览器它在之前停止的位置页面被重新加载(比如在重新启动之前将文件保存到磁盘,从上面继续隐喻)。

一个想法是在页面首次加载时将日期时间值保留到cookie或返回服务器。然后你可以检查这个值,如果它存在则假设计时器已启动并测量已经过了多少时间。

希望有所帮助。

答案 2 :(得分:0)

由于您的服务器时间将与cron同步,我会使用php time()

在您的javascript中添加时间

正如所说的那样,显然硬编码分钟会在页面重新加载时重置计时器,并且依赖用户的系统时间是不可靠的,因为它可能与服务器不同步。