避免使用javascript';当用户使用“后退”和“前进”时,s变量重置

避免使用javascript';当用户使用“后退”和“前进”时,s变量重置,javascript,Javascript,那么 我有一个倒计时计时器,我面临以下问题: 我的倒计时从90秒开始。例如,如果用户等待时间达到2秒,然后使用浏览器按钮返回,然后继续(返回到同一页),倒计时将在90秒重新开始,而不是我需要的2秒,因为当计时器达到0时,我会“单击”发布表单的按钮 我知道我需要处理后退和前进按钮,并用新值设置变量,但我不知道如何才能做到这一点。任何帮助都会很好 我的代码如下: var count = 90; var screenCount = count; var newCount = 0; function c

那么

我有一个倒计时计时器,我面临以下问题:

我的倒计时从90秒开始。例如,如果用户等待时间达到2秒,然后使用浏览器按钮返回,然后继续(返回到同一页),倒计时将在90秒重新开始,而不是我需要的2秒,因为当计时器达到0时,我会“单击”发布表单的按钮

我知道我需要处理后退和前进按钮,并用新值设置变量,但我不知道如何才能做到这一点。任何帮助都会很好

我的代码如下:

var count = 90;
var screenCount = count;
var newCount = 0;
function countFunction() {

    if (screenCount != 0) {
    var minutes = Math.floor(count / 60);
    var seconds = count - minutes * 60;        
    if (count > 60){
        if (seconds < 10)
            seconds = "0" + seconds;
        screen = minutes + "m:" + seconds + "s";
        $('.timer').css('width',"120px")
    }
    else{            
        if (count < 10)
            screen = "0" + count;
        else
            screen = count + "s";            
        $('.timer').css('width',"60px")
    }
    document.getElementById('tempo').innerHTML = screen;
    if (count == 0) {
         set('temporizador', screenCount);
          $(":submit").removeAttr("disabled");
        $('#responder').click(); 

    }
    if (count != 0) {
         set('temporizador',screenCount - count );
        count = count - 1;
        setTimeout("countFunction()", 1000);
    }
    } 
    else {
        document.getElementById('tempo').innerHTML = '∞';

        set('temporizador', newCount);

         newCount++;
        setTimeout("countFunction()", 1000);
    }

}
var计数=90;
变量屏幕计数=计数;
var newCount=0;
函数countFunction(){
如果(屏幕计数!=0){
var分钟=数学地板(计数/60);
var秒=计数-分钟*60;
如果(计数>60){
如果(秒<10)
秒=“0”+秒;
屏幕=分钟+米:+秒+秒;
$('.timer').css('width','120px'))
}
否则{
如果(计数<10)
screen=“0”+计数;
其他的
屏幕=计数+s;
$('.timer').css('width','60px'))
}
document.getElementById('tempo').innerHTML=screen;
如果(计数=0){
设置('temporizador',屏幕计数);
$(“:提交”).removeAttr(“禁用”);
$(“#响应程序”)。单击();
}
如果(计数!=0){
设置('temporizador',屏幕计数-计数);
计数=计数-1;
setTimeout(“countFunction()”,1000);
}
} 
否则{
document.getElementById('tempo')。innerHTML='0∞';
set('temporizador',newCount);
newCount++;
setTimeout(“countFunction()”,1000);
}
}

当用户按下返回键时,将加载一个全新的页面,其中包含一个全新的Javascript上下文。如果要将信息从一个页面的上下文传递到另一个页面的上下文,有几种方法

在您的特定情况下,使用LocalStorage是最简单的:

// count down 90 seconds, including page navigation on this site
var count = +localStorage.getItem('timerCount') || 90;

function countDown() {
  count--;
  localStorage.setItem('timerCount', count);
  if (count<0) window.clearInterval(myInterval);
}

var myInterval = window.setInterval(countDown, 1000);
//倒计时90秒,包括此站点上的页面导航
var count=+localStorage.getItem('timerCount')|90;
函数倒计时(){
计数--;
setItem('timerCount',count);
如果(count,您可以使用javascript事件查看用户何时离开页面,然后根据需要进行操作:更改window.location以重定向用户(并提供其他参数,如计时器),或阻止用户离开页面。

您还可以创建或使用来存储计时器,并在用户下次访问您的页面时将其取回。

您可以按照上面的建议使用本地存储,但存在一个小问题,即一些较旧的浏览器不支持本地存储:

由于您只存储一个数字,因此也可以使用cookie:

var match, count;
if (match = /timerCount=(\d+);/.exec(document.cookie)) {
  count = match[1];
} else {
  count = 90
}

function countDown() {
  count--;
  document.cookie = 'timerCount=' + count + ';';
  if (count<0) window.clearInterval(myInterval);
}

var myInterval = window.setInterval(countDown, 1000);
var匹配,计数;
if(match=/timerCount=(\d+);/.exec(document.cookie)){
计数=匹配[1];
}否则{
计数=90
}
函数倒计时(){
计数--;
document.cookie='timerCount='+count+';';

如果(countGuess,仅存储timerCount是不够的。想象一下这种情况,timerCount=40,用户在新页面上导航,加载速度非常慢,脚本在5秒后启动。这5秒将丢失。因此,如果作者需要真正的倒计时,他将存储一对:timerCount和当前时间。@DmitryVolokh确实,我将添加您的建议。)答案是n。非常好的答案,我只需要删除count--at countdown函数来适应我的代码,因为它设置了2秒而不是1秒。非常感谢!你的答案也是对的,但我的用户使用的是最新版本的浏览器,因为我的目标是IOS和Android。非常感谢。很酷,是的,当你可以用,干杯。