【问题标题】:countdown timer reloading again on refreshing倒数计时器在刷新时再次重新加载
【发布时间】:2015-08-10 11:23:19
【问题描述】:

javascript 中的倒数计时器代码。但是刷新页面时它会再次重新启动。我希望计时器即使重新启动也应该继续。

帮我解决这个问题,因为我是初学者,这是我的第一个应用程序,我需要您提供一些详细信息。

`
<body>
<div id="divCounter"></div>
<script type="text/javascript">

var hoursleft = 0;
var minutesleft = 35;           // you can change these values to any value greater than 0
var secondsleft = 0;

var finishedtext = "Countdown finished!" // text that appears when the countdown reaches 0
var end = new Date();

end.setMinutes(end.getMinutes()+minutesleft);
end.setSeconds(end.getSeconds()+secondsleft);


if(localStorage.getItem("counter")){

    var value = localStorage.getItem("counter");

}else{
  var value = 0;
}


var counter = function (){


    var now = new Date();
var diff = end - now;
diff = new Date(diff);

var sec = diff.getSeconds();
var min = diff.getMinutes();

if (min < 10){
    min = "0" + min;
}
if (sec < 10){
    sec = "0" + sec;
}

if(now >= end){
    clearTimeout(timerID);
    document.getElementById('divCounter').innerHTML = finishedtext;
}
else{
    var value = min + ":" + sec;
//document.getElementById('divCounter').innerHTML = min + ":" + sec;
localStorage.setItem("counter", JSON.stringify(value));
}      

 // timerID = setTimeout("cd()", 1000);
// value = JSON.parse(localStorage.getItem("counter"));
//$('#divCounter').append(value);
document.getElementById('divCounter').innerHTML = value; 
 }





 var interval = setInterval(function (){counter();}, 1000);
 </script>
 </body>
 `

【问题讨论】:

    标签: javascript php web-applications countdowntimer web-application-design


    【解决方案1】:

    你想要的任何时间的倒计时。刷新页面时它不会重新启动。

    <body>
    <div id="divCounter"></div>
    
    
    <script>
    //var hoursleft = 0;
    var minutesleft = 0; //give minutes you wish
    var secondsleft = 30; // give seconds you wish
    var finishedtext = "Countdown finished!";
    var end1;
    if(localStorage.getItem("end1")) {
    end1 = new Date(localStorage.getItem("end1"));
    } else {
    end1 = new Date();
    end1.setMinutes(end1.getMinutes()+minutesleft);
    end1.setSeconds(end1.getSeconds()+secondsleft);
    
    }
    var counter = function () {
    var now = new Date();
    var diff = end1 - now;
    
    diff = new Date(diff);
    
    var milliseconds = parseInt((diff%1000)/100)
        var sec = parseInt((diff/1000)%60)
        var mins = parseInt((diff/(1000*60))%60)
        //var hours = parseInt((diff/(1000*60*60))%24);
    
    if (mins < 10) {
        mins = "0" + mins;
    }
    if (sec < 10) { 
        sec = "0" + sec;
    }     
    if(now >= end1) {     
        clearTimeout(interval);
       // localStorage.setItem("end", null);
         localStorage.removeItem("end1");
         localStorage.clear();
        document.getElementById('divCounter').innerHTML = finishedtext;
         if(confirm("TIME UP!"))
         window.location.href= "timeup.php";
    } else {
        var value = mins + ":" + sec;
        localStorage.setItem("end1", end1);
        document.getElementById('divCounter').innerHTML = value;
    }
    }
    var interval = setInterval(counter, 1000);
    </script>
    </body>
    

    【讨论】:

      【解决方案2】:

      您需要将计时器值存储为 cookie,

      刷新后,检查cookie是否被设置,如果是,获取值并将其设置为你的定时器的初始时间, 否则从 0 开始

      【讨论】:

        【解决方案3】:

        您在这里要做的是设置倒计时的日期/时间并获取当前用户的日期/时间,然后计算倒计时的差异。

        以下内容将帮助您朝着正确的方向前进:

        var date  = new Date(Date.UTC(2015, 5, 28, 12, 0, 0));
        var now   = new Date();
        var diff  = date.getTime()/1000 - now.getTime()/1000;
        

        【讨论】:

          【解决方案4】:

          虽然您从本地存储中读取 value 变量,但实际上并没有将 end 和 now time 设置为它们的旧值,因此它们正在被重置,同时也重置了 value 变量。您还应该将这些值存储在内存中,并在刷新页面时加载它们。

          【讨论】:

          • 如何将这些值存储在内存中并在我刷新页面时加载它们。请解释一下,否则给我链接,我将从那里学习
          • @SMadhu 我上传了一个新答案 - 你可以从那里复制代码
          • 谢谢它正在工作,但是当我想再试一次而不是时间时,我得到“NaN:NaN”。如何重置计时器?
          • 使用这个 - localStorage.setItem("end", null)
          【解决方案5】:

          这是完成的、功能齐全的优化代码。它现在应该可以工作了!

          <body>
          <div id="divCounter"></div>
          <script>
          var hoursleft = 0;
          var minutesleft = 35;
          var secondsleft = 0; 
          var finishedtext = "Countdown finished!";
          var end;
          if(localStorage.getItem("end")) {
              end = new Date(localStorage.getItem("end"));
          } else {
              end = new Date();
              end.setMinutes(end.getMinutes()+minutesleft);
              end.setSeconds(end.getSeconds()+secondsleft);
          }
          var counter = function () {
              var now = new Date();
              var diff = end - now;
              diff = new Date(diff);
              var sec = diff.getSeconds();
              var min = diff.getMinutes(); 
              if (min < 10) {
                  min = "0" + min;
              }
              if (sec < 10) { 
                  sec = "0" + sec;
              }     
              if(now >= end) {     
                  clearTimeout(interval);
                  localStorage.setItem("end", null)
                  document.getElementById('divCounter').innerHTML = finishedtext;
              } else {
                  var value = min + ":" + sec;
                  localStorage.setItem("end", end);
                  document.getElementById('divCounter').innerHTML = value;
              }
          }
          var interval = setInterval(counter, 1000);
          </script>
          </body>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-01
            • 2016-12-27
            相关资源
            最近更新 更多