Javascript定时器页面刷新
我有一个从10分钟开始倒计时的计时器。我需要它,所以当用户刷新页面时,它不会重置计时器。这是我的javascriptJavascript定时器页面刷新,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
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@sizematticsessionStorage
是只使用JS的唯一方法。该值在使用sessionStorage
页面刷新后仍然存在,但如果您关闭选项卡(或打开新选项卡?启动新会话),该值将不会持续存在@sizemattic在您的代码笔中,在初始化start
的值之前,您正在将本地存储设置为start
的值。因此,它只是被保存为未定义。@Anthony sessionStorage在您关闭整个浏览器时被清除。本地存储只有在用户自己清除后才会被清除ves。所以本地存储可能更适合这个用例。是的,你是对的。我认为他说刷新时会重置它是正确的,我只是刚刚测试并意识到他错了。谢谢你的帮助!我尝试了按照你的建议做,但页面刷新时会重置计时器。这是我的代码笔@sizematticSessionStorage
是只使用JS的唯一方法。在使用sessionStorage
刷新页面后,该值确实会保持不变,但如果关闭选项卡(或打开新选项卡?启动新会话),该值将不会保持不变@sizemattic在您的代码笔中,在初始化start
的值之前,您正在将本地存储设置为start
的值。因此,它只是被保存为未定义。@Anthony sessionStorage在您关闭整个浏览器时被清除。本地存储只有在用户自己清除后才会被清除是的,你是对的。我认为他说刷新时会重置它是正确的,我只是刚刚测试了一下,意识到他错了