Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
计时器上的jQuery UI进度条_Jquery_Jquery Ui_Settimeout - Fatal编程技术网

计时器上的jQuery UI进度条

计时器上的jQuery UI进度条,jquery,jquery-ui,settimeout,Jquery,Jquery Ui,Settimeout,我在页面顶部有一个进度条,用来显示用来刷新所有图表的1分钟计时器。我遇到的问题是,它似乎从来都不一致 function headerBar() { var progressbar = $('#timerBar'); progressbar.progressbar({ value: 0 }); function progress() { var val = progressbar.progressbar('value') || 0;

我在页面顶部有一个进度条,用来显示用来刷新所有图表的1分钟计时器。我遇到的问题是,它似乎从来都不一致

function headerBar() {
    var progressbar = $('#timerBar');
    progressbar.progressbar({
        value: 0
    });

    function progress() {
        var val = progressbar.progressbar('value') || 0;
        progressbar.progressbar('value', val + 5);
        if (val < 99) {
            setTimeout(progress, 3000);
        }
    }
    progress();
}
headerBar();
  setInterval(function () {
     headerBar();
  }, 60 * 1000);
第一次运行正常,但第二次似乎需要1/2的时间,之后的每一次似乎都会缩短计数时间


这是您需要的明确间隔。。像这样

function headerBar() {
    var progressbar = $('#timerBar');
    progressbar.progressbar({
        value: 0
    });

    function progress() {
        var val = progressbar.progressbar('value') || 0;
        progressbar.progressbar('value', val + 5);
        if (val < 99) {
            setTimeout(progress, 3000);
        }
    }
    progress();
    clearInterval()
}
headerBar();
setInterval(function () {
        headerBar();
    }, 60 * 1000);

SitePoint上设置超时的更多示例

您需要一个清晰的间隔。。像这样

function headerBar() {
    var progressbar = $('#timerBar');
    progressbar.progressbar({
        value: 0
    });

    function progress() {
        var val = progressbar.progressbar('value') || 0;
        progressbar.progressbar('value', val + 5);
        if (val < 99) {
            setTimeout(progress, 3000);
        }
    }
    progress();
    clearInterval()
}
headerBar();
setInterval(function () {
        headerBar();
    }, 60 * 1000);

更多关于SitePoint设置超时的示例,请参见您的评论:


以下是您的评论:


万岁!你正在进入一种比赛状态。由于setTimeout不能保证像setInterval那样每3000ms调用一次,即使它这样做了,您仍然会遇到这个问题,最有可能发生的情况是,您的interval会在progress停止添加更多超时之前调用headerBar!这里有一个时间表来澄清这一点:

你的进度条是95

超时1->我最好呼叫进度

进度->将进度条设置为val+5=100!val95<99?是 啊我最好设定一个超时时间再给自己打电话

间隔->你的时间到了!校长

headerBar->我将进度设置为0,然后开始更多的进度

进度->将进度条设置为5!暂停再给我自己打电话

进度->将进度条设置为10!暂停再给我自己打电话!哎呀,我从来没有到过val>99停止反复给自己打电话

时光流逝

间歇->是时候加快速度了!校长

但是你如何解决这个问题呢?首先,您需要将进度检查更改为使用val+5<99。这仍然不能避免你遇到的问题,比如打20个超时电话比你的一个间隔时间要长——你需要一些方法来显示你的进度,以停止所有的进度

一种方法是在headerBar中添加一些心智检查:


万岁!你正在进入一种比赛状态。由于setTimeout不能保证像setInterval那样每3000ms调用一次,即使它这样做了,您仍然会遇到这个问题,最有可能发生的情况是,您的interval会在progress停止添加更多超时之前调用headerBar!这里有一个时间表来澄清这一点:

你的进度条是95

超时1->我最好呼叫进度

进度->将进度条设置为val+5=100!val95<99?是 啊我最好设定一个超时时间再给自己打电话

间隔->你的时间到了!校长

headerBar->我将进度设置为0,然后开始更多的进度

进度->将进度条设置为5!暂停再给我自己打电话

进度->将进度条设置为10!暂停再给我自己打电话!哎呀,我从来没有到过val>99停止反复给自己打电话

时光流逝

间歇->是时候加快速度了!校长

但是你如何解决这个问题呢?首先,您需要将进度检查更改为使用val+5<99。这仍然不能避免你遇到的问题,比如打20个超时电话比你的一个间隔时间要长——你需要一些方法来显示你的进度,以停止所有的进度

一种方法是在headerBar中添加一些心智检查:


在headerbar函数中调用函数progress之后放置setInterval函数setInterval函数运行所有代码以获取JSON并更新图表,因此它需要独立运行。我需要headerBar函数完全重置计时器,这样setTImeout函数就不会堆叠。在调用headerBar函数中的函数progress之后,将setInterval函数放在headerBar函数中setInterval函数运行所有代码以获取JSON并更新图表,因此它需要独立运行。我需要headerBar函数完全重置计时器,这样setTImeout函数就不会堆叠。setInterval有很多事情要做-我需要进度条在新的一分钟开始时重置。setInterval不仅适用于progressbar,而且progressbar必须与setInterval同步。我喜欢js fiddle!感谢我在jquery中搜索免费倒计时计时器的代码,这就是我想要的:setInterval有很多事情要做——我需要进度条在它开始新的一分钟时重置。setInterval不仅适用于progressbar,而且progressbar必须与setInterval同步。我喜欢js fiddle!感谢我在jquery中搜索免费倒计时计时器的代码,这就是我想要的:我无法清除间隔,因为setInterval每60秒运行一次混乱的代码-每次setInterval循环时,我都需要progressbar重置。您是否调用头条两次?setInterval开始前的第一次第一个60秒进度-完成时是调用第一个setInterval循环时。setInterval直到页面加载s后60秒才运行其任何代码
o progressbar这次需要显示牙槽,我需要来这里,这样当我请求帮助解决我的问题时,有人可以告诉我我遇到了问题。看看这个问题,我认为它会有帮助。我无法清除间隔,因为setInterval每60秒运行一次混乱的代码-我需要progressbar在每次setInterval循环时重置你在调用header吗bar两次?setInterval开始前60秒的第一次进程-当它结束时,调用第一个setInterval循环。setInterval在页面加载60秒后才运行其任何代码,因此progressbar需要显示这次的toothanks,我需要来这里,以便在我请求帮助解决问题时,有人能告诉我我有问题。看看这个问题,我认为它将有助于加载
function headerBar() {
    var progressbar = $('#timerBar');
    var lastProgress = 0;
    progressbar.progressbar({
        value: lastProgress
    });

    function progress() {
        var val = progressbar.progressbar('value') || 0;
        if (val != lastProgress) {
            // Someone's modified the bar! I best stop before I do too much progress!
            return;
        }
        progressbar.progressbar('value', val + 5);
        if (val + 5 < 99) {
            setTimeout(progress, 3000);
        }
    }
    progress();
}
var headerBar = (function () {
    var inProgress = false;
    var progressbar = $('#timerBar'); // Save some trees by calling jQuery selection only once!
    return function headerBar() {
        if (inProgress) {
            clearTimeout(inProgress);
            inProgress = false;
        }
        progressbar.progressbar({
            value: 0
        });
        function progress() {
            var val = progressbar.progressbar('value') || 0;
            progressbar.progressbar('value', val + 5);
            if (val < 99) {
                inProgress = setTimeout(progress, 3000);
            }
        }
        progress();
    }
})();
// Pass the jQuery element so you not only have to select it once, but don't depend on the headerBar knowing where to look for it.
var headerBar = (function (progressbar) {
    return function headerBar(callback) {
        progressbar.progressbar({ value : 0 });
        (function progress() {
            var newVal = (progressbar.progressbar('value') || 0) + 5;
            progressbar.progressbar('value', newVal);
            if (newVal < 99) setTimeout(progress, 3000);
            else callback();
        })();
    }
})($('#timerBar'));

function heavyLifting() {
    // get stuff, etc
    headerBar(heavyLifting);
}