Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
忽略网页刷新的循环javascript计时器_Javascript_Html - Fatal编程技术网

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

忽略网页刷新的循环javascript计时器,javascript,html,Javascript,Html,显然,我在这方面没有经验——到目前为止,我基本上是拼凑代码的 我有一个供潜在客户访问的演示网站——他们可以登录到仪表板,基本上把一切都搞糟,一小时后,cron作业将恢复存储在服务器其他位置的数据库转储 我遇到了这段代码,我认为显示一个60-0计时器会很有用,也很体贴,让访问者知道网站“重置”需要多长时间,然后从60开始。但是,在浏览器刷新时,计数器也会刷新。我用CSS设计了它的样式,这样它就有了一个信息丰富的标签,整个代码块都从站点的仪表板进入了一个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>

由于您显然控制cron作业,并说它每一小时执行一次,因此可以使用JavaScript来计算

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

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


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

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

如果您想避免这种情况,您必须找到一种方法来避免浏览器重新加载javascript,或者更好的方法是,使用持久数据存储来存储数据,以便在页面重新加载之前告诉浏览器它在何处停止,就像在重新启动之前将文件保存到磁盘一样,继续上面的比喻

一个想法是在页面首次加载时将datetime值持久化到cookie或返回到服务器。然后可以检查该值,如果该值存在,则假设计时器已启动,并测量经过的时间


希望这会有所帮助。

因为您的服务器时间将与cron同步,所以我将使用php在javascript中添加时间


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

将初始时间存储在cookie中,然后使用此值与页面重新加载时进行比较。伙计们!谢谢你帮助我,但请重读第一行-我没有这方面的经验。你的大多数建议似乎都假设我知道如何实现这些。虽然我不是在找保姆,但我真的需要有人帮我写下一段好代码或纠正我的错误-嘿,老兄,这不能在你的环境限制内完成。对此我不会介意。戴夫,谢谢你的提问,但这不是我们为你做这些工作的网站。@Lee-很公平。正如我提到的,这就是我需要阅读的全部内容。谢谢。@MkeSpaGuy主页看起来确实不错,谢谢你的链接!