2017-07-07 147 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>

相關問題