1

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

我有演示网站供潜在客户访问——他们可以登录仪表板,基本上把所有事情都搞砸了,一个小时后,一个 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>
4

3 回答 3

0

由于您(显然)控制 cron 作业,并说它每整小时执行一次,您可以使用 JavaScript 计算now 和 next hour 之间的时间差

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

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

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

于 2013-07-14T13:43:07.843 回答
0

由于您的服务器时间将与 cron 同步,因此我将使用 php time()在您的 javascript 中添加时间

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

于 2013-07-14T13:57:09.900 回答
0

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

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

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

希望有帮助。

于 2013-07-14T13:48:40.633 回答