2017-07-07 146 views
1

请理解下面的问题更多的是学术问题,因为我试图理解我将要描述的问题背后的逻辑。即使没有加载页面,也能运行脚本

很多时候我看过网站(特别是关于即将上映的电影电影)有倒数计时器。这告诉页面访问者关于电影在剧院中的发行日期。

我的问题是他们如何编码以便即使没有人访问过该页面时也能运行?例如,JavaScript代码仅在加载页面时起作用。这会使倒数计时器每次都重置。我真的很困惑人们如何访问这些网站,倒数计时器已经工作。

我只需要逻辑,而不是一些特定的编码。谢谢大家。

+1

在JavaScript计时器的情况下:通过倒计时在目标时间上网页加载,并且该时间 - 没有必要要执行每一个倒计时(毫秒)在后台;你只需要目标时间。 –

+1

计数器并未一直运行。当页面加载时,有一个变量存在事件应该发生的日期和时间。然后,JavaScript将查看当前时间,将其与事件时间进行比较,并计算差异。此代码每秒运行一次以更新计数器。 – crazyloonybin

+0

https://stackoverflow.com/questions/9335140/how-to-countdown-to-a-date – Turnip

回答

2

JS计数器仅在用户正在查看页面时运行。这里发生了什么:

  1. PHP(后端)有事件开始时间。根据他的计算有多少时间留给
  2. 输出该左时候JS像var timeLeft = "<?php echo getTimeLeft($eventId); ?>";
  3. 现在JS只是递减这次setInterval()

所以基本上是的,JS计数器复位所有的时间,你重新输入页面。但开始时间总是不一样。


还有另一种选择,当你需要做定期的行动,无需人工交互(例如,在00:00每天晚上发送电子邮件为用户)。

然后我们使用Cron Job(搜索crontab linux)。您提供必须执行的文件路径,服务器在时间到时调用该文件。

+0

我真的很感激你的意见。谢谢。 – Mdermez

2

在这里我已经做了一个简单的倒数计时器,你可以看一看,没有什么特别的,你只需要知道结束日期并设置它。剩下的只是数学问题;]。

function countDown (endDate) { 
 
    var dateEnd = new Date(endDate); // set future date 
 
    var curDate = new Date(); // set current date 
 
    var diff = dateEnd.getTime() - curDate.getTime(); // get the difference 
 
    var leftSecs = diff/1000; 
 
    var oneMinSecs = 60; 
 
    var oneHourSecs = 60 * oneMinSecs; 
 
    var oneDaySecs = oneHourSecs * 24; 
 

 
    var estDays = Math.floor(leftSecs/oneDaySecs); 
 
    var estHours = Math.floor((leftSecs - (estDays*oneDaySecs))/oneHourSecs); 
 
    var estMins = Math.floor((leftSecs - ((estDays*oneDaySecs)+(estHours*oneHourSecs)))/60); 
 
    var estSecs = Math.floor(leftSecs - ((estDays*oneDaySecs)+(estHours*oneHourSecs)+(estMins*oneMinSecs))); 
 

 
    return [estDays, estHours, estMins, estSecs]; 
 
} 
 

 
var timerEl = document.getElementById('timer'); 
 

 
setInterval(function() { 
 
    var est = countDown('07-15-2017'); 
 
    timerEl.innerHTML = 'days: ' + est[0] 
 
    + ' hours: ' + est[1] 
 
    + ' mins: ' + est[2] 
 
    + ' sec: ' + est[3] + ' left to 07-15-2017'; 
 
}, 1000);
<div id="timer"></div>

相关问题