2017-10-20 76 views
0

我的計時器在窗口加載時啓動。在訪問者關閉我的網頁後,計時器暫停。如果訪問者在10小時後打開同一頁面(帶定時器),則定時器將從它早先暫停的同一時間開始。訪問者離開網站後繼續倒數計時器

我想創建開始時網站的頁面加載 3小時定時器和保持在後臺即使訪問者當前沒有訪問我的網站頁面滴答作響。

如果他在3小時後訪問網站,我希望在此3小時計時器過期後將訪問者重定向到另一個頁面「amazon.com」。

function countdown() { 
 
    time = parseInt(localStorage.time); 
 

 
    if(isNaN(time) || time > (38 * 60)) { 
 
    //alert("An error occured: time left variable is corrupted, resetting timer"); 
 
    localStorage.time = 38 * 60; 
 
    countdown(); 
 
    return null; 
 
    } 
 

 
    if(time <= 0) { 
 
    alert("Your Timer Has Run Out! We Still Got 2 Discount Copies Left, Hurry Up!"); 
 
    return null; 
 
    } 
 

 
    var timers = document.getElementsByClassName('timeleft'); 
 

 
    Array.prototype.forEach.call(timers, function(timer) { 
 
    timer.innerText = formatTime(time); 
 
    }) 
 

 
    time--; 
 
    localStorage.time = time; 
 
    setTimeout('countdown()', 1000); 
 
} 
 

 
function formatTime(time) { 
 
    minutes = Math.floor(time/60); 
 
    seconds = time - minutes * 60; 
 

 
    if(String(seconds).length == 1) { 
 
    return String(minutes) + ":0" + String(seconds); 
 
    } 
 

 
    return String(minutes) + ":" + String(seconds); 
 
} 
 

 
window.onload = function() { 
 
    countdown(); 
 
}
<font size="+34"><div class="timeleft"></div></font>

+2

首先,這聽起來像一個可怕的想法,如果你這樣做,我會積極抵制你煩人的網站。其次,你意識到JavaScript運行在一個頁面上,對吧?你打算如何運行那些不存在的代碼(例如,當用戶關閉頁面時,沒有JavaScript)? – Paul

+2

這兩個要求是不兼容的:_「即使訪問者當前沒有訪問我的網站」_和_「我希望將訪問者重定向到另一個頁面」_。 – msanford

+1

我認爲可能的意圖是在訪問站點後重定向到亞馬遜*在最初的3小時窗口之後 – djfdev

回答

0

我想你可以只保存在localStorage的開始時間,並把它比作每當頁面加載當前時間:

function startOrRedirect() { 
    const startTime = localStorage.getItem('startTime') 

    if (startTime) { 
    const date1 = new Date(parseInt(startTime)) 
    const date2 = new Date() 
    const hours = Math.abs(date1 - date2)/36e5; 

    if (hours >= 3) { 
     redirect() 
    } 
    } else { 
    localStorage.setItem('startTime', Date.now) 
    setTimeout(redirect, 1000 * 60 * 60) 
    } 
} 

function redirect() { 
    window.location = 'https://amazon.com' 
} 

window.onload = startOrRedirect