第二次刷新时的JavaScript输出

第二次刷新时的JavaScript输出,javascript,html,Javascript,Html,我试图在java脚本中运行一个动态计时器,每当我运行它时,它都不会给我任何东西,但在第二次刷新时,它会给输出以第一次加载时已经启动的时间运行。我在考虑本地存储,因为我想为多个选项卡共享计时器。任何解决办法都可以帮助我 p{ 文本对齐:居中; 字体大小:60px; 边际上限:0px; } var countDownDate=localStorage.getItem(“时间”); 如果(!倒计时日期){ var today=新日期(); var fewhours=today.setMinutes

我试图在java脚本中运行一个动态计时器,每当我运行它时,它都不会给我任何东西,但在第二次刷新时,它会给输出以第一次加载时已经启动的时间运行。我在考虑本地存储,因为我想为多个选项卡共享计时器。任何解决办法都可以帮助我


p{
文本对齐:居中;
字体大小:60px;
边际上限:0px;
}

var countDownDate=localStorage.getItem(“时间”); 如果(!倒计时日期){ var today=新日期(); var fewhours=today.setMinutes(today.getMinutes()+1); setItem(“时间”,fewhours); } 否则{ //每1秒更新一次倒计时 var x=setInterval(函数(){ //获取今天的日期和时间 var now=new Date().getTime(); //找出现在和倒计时日期之间的距离 var距离=倒计时日期-现在; //天、小时、分钟和秒的时间计算 变量天数=数学楼层(距离/(1000*60*60*24)); 可变小时数=数学楼层((距离%(1000*60*60*24))/(1000*60*60)); var分钟=数学楼层((距离%(1000*60*60))/(1000*60)); var秒=数学楼层((距离%(1000*60))/1000); //在id=“demo”的元素中输出结果 document.getElementById(“demo”).innerHTML=days+d+hours+h +分钟+米+秒+秒; //如果倒计时结束,写一些文字 如果(距离<0){ 净间隔(x); document.getElementById(“demo”).innerHTML=“过期”; } }, 1000); }
<代码> > P> >,让我们看看这里的JS代码:

首先,它尝试从本地存储中获取时间

if(!countDownDate){
  var today = new Date();
  var fewhours=today.setMinutes(today.getMinutes() + 1);
  localStorage.setItem("time", fewhours);
}
然后,如果未找到
time
,或者等于
false
,它将在本地存储器中设置它。到目前为止,一切都很好

else{...}
好的。所以,这里是事情变得棘手的地方

if
/
else
块通常具有以下功能:

  • 他们检查
    if
    后面括号内的语句
  • 如果该语句为
    true
    ,则将执行代码块(大括号内的代码
    {}
  • 如果该语句为
    false
    ,它将继续,忽略它后面可能出现的任何其他
    else
  • 如果在
    If
    块的右下方有一个
    else
    ,它将继续评估该零件。在任何不同的情况下,它将继续正常执行代码
  • 那么在这种情况下会发生什么呢?如果与
    If
    部分代码对应的代码块运行,这意味着这是我们第一次运行它,因为本地存储中没有
    time
    ,JavaScript将忽略以下
    else{…}
    块中的代码

    但是我们想让它在页面第一次加载时运行,不是吗

    如果是这样的话,我们应该考虑在代码< > < /COD>块外移动实际倒计时的代码。这样,我们的代码将首先检查

    time
    是否确实存在于本地存储中,如果不存在,它将初始化它。然后,它可以继续在屏幕上实际显示剩余时间

    那么,我们如何解决这个问题呢?简单

    我们唯一要做的就是删除
    else{
    行,以及相应的右大括号:

    var countDownDate = localStorage.getItem("time");
    
    if (!countDownDate) {
        var today = new Date();
        var fewhours = today.setMinutes(today.getMinutes() + 1);
        localStorage.setItem("time", fewhours);
    }
    
    // Update the count down every 1 second
    var x = setInterval(function() {
    
        // Get today's date and time
        var now = new Date().getTime();
    
        // Find the distance between now and the count down date
        var distance = countDownDate - now;
    
        // Time calculations for days, hours, minutes and seconds
        var days = Math.floor(distance / (1000 * 60 * 60 * 24));
        var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
        var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
        var seconds = Math.floor((distance % (1000 * 60)) / 1000);
    
        // Output the result in an element with id="demo"
        document.getElementById("demo").innerHTML = days + "d " + hours + "h " +
            minutes + "m " + seconds + "s ";
    
        // If the count down is over, write some text 
        if (distance < 0) {
            // clearInterval(x);
            document.getElementById("demo").innerHTML = "EXPIRED";
        }
    }, 1000);
    
    通过这种方式,我们可以立即获得正确的值,并继续执行代码的其余部分

    以下是代码的最终版本,包括上述所有更改:

    <!DOCTYPE HTML>
    <html>
    
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style>
            p {
                text-align: center;
                font-size: 60px;
                margin-top: 0px;
            }
        </style>
    </head>
    
    <body>
        <p id="demo"></p>
        <script>
            var countDownDate = localStorage.getItem("time");
    
            if (!countDownDate) {
                var today = new Date();
                var fewhours = today.setMinutes(today.getMinutes() + 1);
                localStorage.setItem("time", fewhours);
                // Get time one more time
                countDownDate = localStorage.getItem("time");
            }
    
            // Update the count down every 1 second
            var x = setInterval(function() {
    
                // Get today's date and time
                var now = new Date().getTime();
    
                // Find the distance between now and the count down date
                var distance = countDownDate - now;
    
                // Time calculations for days, hours, minutes and seconds
                var days = Math.floor(distance / (1000 * 60 * 60 * 24));
                var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
                var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
                var seconds = Math.floor((distance % (1000 * 60)) / 1000);
    
                // Output the result in an element with id="demo"
                document.getElementById("demo").innerHTML = days + "d " + hours + "h " +
                    minutes + "m " + seconds + "s ";
    
                // If the count down is over, write some text 
                if (distance < 0) {
                    // clearInterval(x);
                    document.getElementById("demo").innerHTML = "EXPIRED";
                }
            }, 1000);
        </script>
    
    </body>
    
    </html>
    
    
    p{
    文本对齐:居中;
    字体大小:60px;
    边际上限:0px;
    }
    

    var countDownDate=localStorage.getItem(“时间”); 如果(!倒计时日期){ var today=新日期(); var fewhours=today.setMinutes(today.getMinutes()+1); setItem(“时间”,fewhours); //再来一次 countDownDate=localStorage.getItem(“时间”); } //每1秒更新一次倒计时 var x=setInterval(函数(){ //获取今天的日期和时间 var now=new Date().getTime(); //找出现在和倒计时日期之间的距离 var距离=倒计时日期-现在; //天、小时、分钟和秒的时间计算 变量天数=数学楼层(距离/(1000*60*60*24)); 可变小时数=数学楼层((距离%(1000*60*60*24))/(1000*60*60)); var分钟=数学楼层((距离%(1000*60*60))/(1000*60)); var秒=数学楼层((距离%(1000*60))/1000); //在id=“demo”的元素中输出结果 document.getElementById(“demo”).innerHTML=days+d+hours+h+ 分钟+米+秒+秒; //如果倒计时结束,写一些文字 如果(距离<0){ //净间隔(x); document.getElementById(“demo”).innerHTML=“过期”; } }, 1000);
    第一次运行-您在Localstorage中没有记录,因此如果记录为true,则其他记录无效。更改脚本的逻辑,我不确定您想要什么?脚本与您编写的代码一样工作。谢谢,非常感谢您的精彩解释。理解,为我工作…很高兴听到它帮助您:)您介意接受答案吗?
    <!DOCTYPE HTML>
    <html>
    
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style>
            p {
                text-align: center;
                font-size: 60px;
                margin-top: 0px;
            }
        </style>
    </head>
    
    <body>
        <p id="demo"></p>
        <script>
            var countDownDate = localStorage.getItem("time");
    
            if (!countDownDate) {
                var today = new Date();
                var fewhours = today.setMinutes(today.getMinutes() + 1);
                localStorage.setItem("time", fewhours);
                // Get time one more time
                countDownDate = localStorage.getItem("time");
            }
    
            // Update the count down every 1 second
            var x = setInterval(function() {
    
                // Get today's date and time
                var now = new Date().getTime();
    
                // Find the distance between now and the count down date
                var distance = countDownDate - now;
    
                // Time calculations for days, hours, minutes and seconds
                var days = Math.floor(distance / (1000 * 60 * 60 * 24));
                var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
                var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
                var seconds = Math.floor((distance % (1000 * 60)) / 1000);
    
                // Output the result in an element with id="demo"
                document.getElementById("demo").innerHTML = days + "d " + hours + "h " +
                    minutes + "m " + seconds + "s ";
    
                // If the count down is over, write some text 
                if (distance < 0) {
                    // clearInterval(x);
                    document.getElementById("demo").innerHTML = "EXPIRED";
                }
            }, 1000);
        </script>
    
    </body>
    
    </html>