Javascript定时器页面刷新

Javascript定时器页面刷新,javascript,cookies,countdown,Javascript,Cookies,Countdown,我有一个从10分钟开始倒计时的计时器。我需要它,所以当用户刷新页面时,它不会重置计时器。这是我的javascript function startTimer(duration, display) { var start = Date.now(), diff, minutes, seconds; function timer() { // get the number of seconds that have elapsed since // startT

我有一个从10分钟开始倒计时的计时器。我需要它,所以当用户刷新页面时,它不会重置计时器。这是我的javascript

function startTimer(duration, display) {
var start = Date.now(),
    diff,
    minutes,
    seconds;
function timer() {
    // get the number of seconds that have elapsed since 
    // startTimer() was called
    diff = duration - (((Date.now() - start) / 1000) | 0);

    // does the same job as parseInt truncates the float
    minutes = (diff / 60) | 0;
    seconds = (diff % 60) | 0;

    minutes = minutes < 10 ? "0" + minutes : minutes;
    seconds = seconds < 10 ? "0" + seconds : seconds;

    display.textContent = minutes + ":" + seconds; 

    if (diff <= 0) {
        // add one second so that the count down starts at the full     duration
        // example 05:00 not 04:59
        start = Date.now() + 1000;
    }
};
// we don't want to wait a full second before the timer starts
timer();
setInterval(timer, 1000);
}

window.onload = function () {
var fiveMinutes = 60 * 10,
    display = document.querySelector('#time');
startTimer(fiveMinutes, display);
};
功能启动定时器(持续时间,显示){
var start=Date.now(),
差异,
会议记录,
秒;
函数计时器(){
//获取此后经过的秒数
//调用了startTimer()
diff=持续时间-((Date.now()-start)/1000)| 0);
//执行与parseInt相同的任务来截断浮点值
分钟=(差异/60)| 0;
秒=(差异%60)| 0;
分钟=分钟<10?“0”+分钟:分钟;
秒=秒<10?“0”+秒:秒;
display.textContent=分钟+“:”+秒;

如果(diff是2019年,我强烈建议使用本地存储或会话存储而不是cookie

const start = localStorage.getItem('startTime') || Date.now();
// ...rest of your code...
window.onload = function() {
    localStorage.setItem('startTime', start);
    // ...rest of your code...
};

您可能希望在设置
start
的值后,将
localStorage.setItem
位放入
startTimer
函数中。具体取决于所需内容的详细信息。

现在是2019年。我强烈建议使用localStorage或sessionStorage代替cookies

const start = localStorage.getItem('startTime') || Date.now();
// ...rest of your code...
window.onload = function() {
    localStorage.setItem('startTime', start);
    // ...rest of your code...
};

设置
start
的值后,您可能需要将
localStorage.setItem
位放入
startTimer
函数中。这取决于所需内容的详细信息。

我很好奇,您是想让计时器计算刷新页面所需的时间,还是仅仅从停止的位置恢复页面所需的时间I’我希望它能说明刷新页面所需的时间。我很好奇,你是希望你的计时器能说明刷新页面所需的时间,还是只是从停止的位置继续?我希望它能说明刷新页面所需的时间。谢谢你的帮助!我试着按照你的建议做了,但它会重置时间r页面刷新。这里有一个my codepen@sizemattic
sessionStorage
是只使用JS的唯一方法。该值在使用
sessionStorage
页面刷新后仍然存在,但如果您关闭选项卡(或打开新选项卡?启动新会话),该值将不会持续存在@sizemattic在您的代码笔中,在初始化
start
的值之前,您正在将本地存储设置为
start
的值。因此,它只是被保存为未定义。@Anthony sessionStorage在您关闭整个浏览器时被清除。本地存储只有在用户自己清除后才会被清除ves。所以本地存储可能更适合这个用例。是的,你是对的。我认为他说刷新时会重置它是正确的,我只是刚刚测试并意识到他错了。谢谢你的帮助!我尝试了按照你的建议做,但页面刷新时会重置计时器。这是我的代码笔@sizemattic
SessionStorage
是只使用JS的唯一方法。在使用
sessionStorage
刷新页面后,该值确实会保持不变,但如果关闭选项卡(或打开新选项卡?启动新会话),该值将不会保持不变@sizemattic在您的代码笔中,在初始化
start
的值之前,您正在将本地存储设置为
start
的值。因此,它只是被保存为未定义。@Anthony sessionStorage在您关闭整个浏览器时被清除。本地存储只有在用户自己清除后才会被清除是的,你是对的。我认为他说刷新时会重置它是正确的,我只是刚刚测试了一下,意识到他错了