首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能clearInterval

不能clearInterval
EN

Stack Overflow用户
提问于 2015-05-27 19:53:26
回答 2查看 58关注 0票数 0

我是新来的,在Javascript里也是。我正在创建一个计时器,它将显示从特定日期和时间剩下多少天、几个小时、几分钟、几秒。我成功地编写了这个程序,但这里有一个问题我无法解决。当到达特定日期和时间时,计时器显示0天、0小时、0分钟、0秒。但就在那之后,数值就变成了负值。我不想显示负值,这就是为什么我使用clearInterval停止每秒更新DOM的原因,但它不起作用。这是我的密码。

代码语言:javascript
复制
function init()
{
.
.
.
var timeCalc = setInterval(timeRemainingCalc, 1000);
}
    
    var launchTime = new Date("05/28/2015 00:56:00").getTime(); //here goes a particular date and time
    
    function timeRemainingCalc() {
        var currentTime = new Date(); //this gets client's date and time
        var daysleft = Math.floor(((launchTime - currentTime.getTime()) / 1000) / 86400);
        var hoursleft = Math.floor(((launchTime - currentTime.getTime()) / 1000) / 3600) - daysleft * 24;
        var minutesleft = Math.floor(((launchTime - currentTime.getTime()) / 1000) / 60) - daysleft * 24 * 60 - hoursleft * 60;
        var secondsleft = Math.floor((launchTime - currentTime.getTime()) / 1000) - daysleft * 24 * 60 * 60 - hoursleft * 60 * 60 - minutesleft * 60;
        if (daysleft <= 0 && hoursleft <= 0 && minutesleft <= 0 && secondsleft <= 0) //checks if the particular time has already been reached or not? i.e. negative value
        {
            clearInterval(timeCalc); //this one is not working...
        } else //code inside this only updates 1st and 2nd digit of days, hours, etc of the timer
        {
            document.getElementById('Days0').innerHTML = Math.floor(daysleft / 10);
            document.getElementById('Days1').innerHTML = daysleft - Math.floor(daysleft / 10) * 10;
            document.getElementById('Hours0').innerHTML = Math.floor(hoursleft / 10);
            document.getElementById('Hours1').innerHTML = hoursleft - Math.floor(hoursleft / 10) * 10;
            document.getElementById('Minutes0').innerHTML = Math.floor(minutesleft / 10);
            document.getElementById('Minutes1').innerHTML = minutesleft - Math.floor(minutesleft / 10) * 10;
            document.getElementById('Seconds0').innerHTML = Math.floor(secondsleft / 10);
            document.getElementById('Seconds1').innerHTML = secondsleft - Math.floor(secondsleft / 10) * 10;
        }
    }

我认为HTML代码和CSS代码在这里是不必要的。如果需要的话,告诉我我也会上传的。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-27 20:19:08

您正在其他函数范围中定义timecalc。你不能访问变量。

最简单的解决方案:做一个

代码语言:javascript
复制
var timeCalc;
function init()
{    ...
     timeCalc = setInterval(timeRemainingCalc, 1000);
}

使timeCalc在全球范围内可用。

票数 0
EN

Stack Overflow用户

发布于 2015-05-27 20:03:59

好吧,除非时间正好是clearInterval,否则您的代码不会调用launchTime

使用这个修改后的版本的launchTime值,您将看到:

代码语言:javascript
复制
var timeCalc = setInterval(timeRemainingCalc, 1000);

var launchTime = new Date("01/01/2015 00:01:00").getTime(); //here goes a particular date and time

function timeRemainingCalc() {
    var currentTime = new Date(); //this gets client's date and time
    var daysleft = Math.floor(((launchTime - currentTime.getTime()) / 1000) / 86400);
    var hoursleft = Math.floor(((launchTime - currentTime.getTime()) / 1000) / 3600) - daysleft * 24;
    var minutesleft = Math.floor(((launchTime - currentTime.getTime()) / 1000) / 60) - daysleft * 24 * 60 - hoursleft * 60;
    var secondsleft = Math.floor((launchTime - currentTime.getTime()) / 1000) - daysleft * 24 * 60 * 60 - hoursleft * 60 * 60 - minutesleft * 60;

    if (daysleft <= 0 && hoursleft <= 0 && minutesleft <= 0 && secondsleft <= 0) //checks if the particular time has already been reached or not? i.e. negative value
    {
        console.log("Clear!");
        clearInterval(timeCalc); //this one is not working...
    } else //code inside this only updates 1st and 2nd digit of days, hours, etc of the timer
    {
        console.log("daysleft: " + daysleft);
        console.log("hoursleft: " + hoursleft);
        console.log("minutesleft: " + minutesleft);
        console.log("secondsleft: " + secondsleft);
        console.log("");
    }
}

jsFiddle - https://jsfiddle.net/o991pkxa/

您应该检查是否有任何days/hours/minutes/secondsleft变量是负的,而不是所有的变量都是负的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30491940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档