即使没有加载页面也运行脚本

时间:2017-07-07 11:03:41

标签: javascript php html

请理解以下问题更像是学术问题,因为我试图理解我要描述的问题背后的逻辑。

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

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

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

2 个答案:

答案 0 :(得分:2)

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

  1. PHP(后端)有事件开始时间。他计算剩下多少时间
  2. 将此剩余时间输出到JS,如var timeLeft = "<?php echo getTimeLeft($eventId); ?>";
  3. 现在JS只用setInterval()
  4. 减少了这次

    所以基本上是的,当你重新进入页面时,JS计数器会被重置。但它的开始时间总是不同的。

    还有另一种选择,当您需要在没有人工干预的情况下进行定期操作时(例如,每晚00:00为订阅者发送电子邮件)。

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

答案 1 :(得分:2)

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

&#13;
&#13;
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);
&#13;
<div id="timer"></div>
&#13;
&#13;
&#13;