2017-10-20 99 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