Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;“无限”;“设置间隔函数”;超时“;_Javascript_Setinterval - Fatal编程技术网

Javascript &引用;“无限”;“设置间隔函数”;超时“;

Javascript &引用;“无限”;“设置间隔函数”;超时“;,javascript,setinterval,Javascript,Setinterval,有一个我想不出来的有点奇怪的问题。我设置了一个javascript计时器,它所做的只是每秒重复一次间隔,检查两个日期之间的差异并显示结果。所有这些看起来都很好,但是当浏览器打开几分钟(不要触摸它……实际上是走开一段时间),它似乎“超时”并停止运行。没有控制台错误消息或任何东西,代码只是停止执行。。我想知道是否有人知道这是什么原因造成的?是我的代码出了问题,还是这是一个内置的浏览器功能,用于在某个时间内没有用户输入页面时停止js功能 编辑对不起,我应该提到,这个计时器目前被设置为运行大约40天,因

有一个我想不出来的有点奇怪的问题。我设置了一个javascript计时器,它所做的只是每秒重复一次间隔,检查两个日期之间的差异并显示结果。所有这些看起来都很好,但是当浏览器打开几分钟(不要触摸它……实际上是走开一段时间),它似乎“超时”并停止运行。没有控制台错误消息或任何东西,代码只是停止执行。。我想知道是否有人知道这是什么原因造成的?是我的代码出了问题,还是这是一个内置的浏览器功能,用于在某个时间内没有用户输入页面时停止js功能

编辑对不起,我应该提到,这个计时器目前被设置为运行大约40天,因此它在用户会话中永远不会满足clearinterval语句。im添加到函数中的future date变量是来自PHP的一个动态unix时间戳,其日期大约为未来40天。当前设置为1444761301.88

function MModeTimer(futureDate) {
    zIntervalActive = true;
    var currentTime = new Date().getTime() / 1000;
    var timeRemaining = futureDate - currentTime;

    var minute = 60;
    var hour = 60 * 60;
    var day = 60 * 60 * 24;
    var zDays = Math.floor(timeRemaining / day);
    var zHours = Math.floor((timeRemaining - zDays * day) / hour);
    var zMinutes = Math.floor((timeRemaining - zDays * day - zHours * hour) / minute);
    var zSeconds = Math.floor((timeRemaining - zDays * day - zHours * hour - zMinutes * minute));

    if (zSeconds <= 0 && zMinutes <= 0) {
        console.log("timer in negative");
        // timer at zero 
        clearInterval(zTimeInterval);

    } else {

        if (futureDate > currentTime) {
            console.log("timer interval running");
            // changes html as part of function
        }

    }


}

zTimeInterval = setInterval(function() {
    MModeTimer(zNewTime)
}, 1000);
功能MModeTimer(未来日期){
zIntervalActive=true;
var currentTime=new Date().getTime()/1000;
var Time剩余=未来日期-当前时间;
var分钟=60;
var小时=60*60;
var日=60*60*24;
var zDays=数学下限(剩余时间/天);
var zHours=数学楼层((剩余时间-Z天*天)/小时);
var zMinutes=数学楼层((剩余时间-zDays*天-周*小时)/分钟);
var zSeconds=数学楼层((剩余时间-零天*天-周*小时-零分钟*分钟));
如果(z秒此行:

clearInterval(zTimeInterval);
在以下情况下正在清除间隔:

if (zSeconds <= 0 && zMinutes <= 0) {

这样,您可以确保如果间隔正在运行,可能您的条件在一段时间后不是真的,您将看不到任何日志,但间隔仍在运行。

控制台是否在停止工作之前注销
计时器为负
?不,(那太容易了!)它不需要点击
clearInterval
。你有一个条件说它应该只记录到
futuretime
过去。所以我猜你没有将
futuretime
设置为你认为的值。展示一下你是如何设置的。很有可能,因为你用1000的间隔调用它,它是不是每秒钟都在运行,所以条件
(zSeconds)是有意义的,因为它会在每小时的一小时停止运行。奇怪的是,如果它从不记录“清除”消息……抱歉,我错过了我描述的一个重要部分,计时器被设置为运行大约40天。clearinterval语句在用户会话中永远不会为真(好吧,反正暂时不行!)
function MModeTimer(futureDate) {
    console.log('running');
    //... rest of your code