逐步减少间隔

时间:2013-10-01 21:55:51

标签: javascript jquery

尝试创建速度越来越慢的加载栏。我已经做到了所以增加宽度的每一点都逐渐变小,但现在我想对间隔值做同样的事情。截至目前,我的变量“itime”设置为1000,并且每步都不会减慢。我做错了什么?

var itime = 1000;

var progress = setInterval(function(){

    var insidewidth = $('#inside').width();

    if (insidewidth > 388) {
        $("body").css("background","blue");
        clearInterval(progress);
    }
    else {
        $("#inside").width($("#inside").width() + (175/insidewidth) );
        itime += 1000;
    };


}, itime);

3 个答案:

答案 0 :(得分:3)

设置间隔后,您无法更改它。请改为使用超时和递归:

var itime = 1000;

function progress(){
    setTimeout(function() {
        var insidewidth = $('#inside').width();

        if (insidewidth > 388) {
            $("body").css("background","blue");
        } else {
            $("#inside").width(insidewidth + (175/insidewidth) );
            itime += 1000;
            progress();
        }

    }, itime);
}

答案 1 :(得分:1)

当您使用jQuery时,您可能希望使用easing functions,特别是easeOutExpo可能适合您的用例,例如。

$("#inside").animate({ width: bar_width }, duration:5000, easing: 'easeOutExpo'});

如果需要,您可以提供custom easing function

答案 2 :(得分:0)

这是另一种不涉及重复设置计时器的方法:

$(function() {
    var nMax = 99;
    var nWidth = 0;
    var nSpeed = 100;

    var $progressBar = $('.progress-bar div');

    var oInterval = window.setInterval(function() {
        nWidth += (nMax - nWidth) / 100;

        $progressBar.stop().animate({
            width: nWidth + '%'
        }, nSpeed);

        if(Math.round(nWidth) === nMax) window.clearInterval(oInterval);
    }, nSpeed);
});

Fiddle example