根据计数器增加进度条

时间:2013-10-10 20:20:29

标签: javascript html5 progress-bar

如何根据计数器值获取进度条以更改'speed'或setInterval?因此,例如,如果条形小于40 - 执行此操作,或者小于60执行此操作,依此类推。

我试图在达到40之后放慢进度条,然后进一步降低60%。

var counter = 0;
var timer = setInterval(function () {
        if (counter <= '40') {
            progressLoading.val(counter);
            counter = counter += 1;
        } else {
            clearInterval(timer);
        }
    }, 20);

1 个答案:

答案 0 :(得分:1)

在控制台中运行以下命令,看看这是否是您想要的效果。

var counter = 0;
var factor = 1;

var damping = 80; // Increase this to slow down increment.

// This is the minimum value of 'factor'. Increasing this will speed up the function
var minVal = 0.1; 

var timer = setInterval(function () {
    console.log(Math.ceil(counter)); // Call your function here.
    counter = counter + factor;
    if (counter > 40 && counter < 100) {
        factor = Math.max((100 - counter)/damping, minVal)
    } else if (counter > 100) {
        clearInterval(timer);
    }
}, 20);

最初,counter正在增加factor = 1。在40之后,factor逐渐减少。 factor的最小值不能小于minVal

显示更多违规行为的进展 -

var counter = 0;
var factor = 1;

var timer = setInterval(function () {
    console.log(Math.ceil(counter)); // Call your function here.
    counter = counter + factor;
    if (counter > 40 && counter < 100) {
        factor = Math.max(Math.abs(Math.sin(100 - counter)), 0.1)
    } else if (counter > 100) {
        clearInterval(timer);
    }
}, 20);

Math.sin函数始终返回-1+1之间的数字。我们只需要积极的,所以我们将其传递给Math.abs。这使得factor始终位于01之间。

此外,数字可能太小,因此因子值可能无关紧要。为确保不会发生这种情况,我们将最低值设置为0.1,由Math.max进行检查。

显示不规则和降低速度的进展 -

var counter = 0;
var factor = 1;

var maxVal = 1; // Maximum value of `factor` after crossing 40
var minVal = 0.1; // Minimum value of `maxVal`
var damping = 60; // damping for `maxVal`

var timer = setInterval(function () {
    console.log(Math.ceil(counter)); // Call your function here.
    counter = counter + factor;
    if (counter > 40 && counter < 100) {
        maxVal = Math.max((100 - counter)/damping, minVal)
        factor = Math.min(Math.max(Math.abs(Math.sin(100 - counter)), 0.1), maxVal);
    } else if (counter > 100) {
        clearInterval(timer);
    }
}, 20);

这一个都是以上两者的组合。在第二个中,factor可以是01之间的任何内容。上述功能可确保factor介于0maxVal之间,并且我们使用使用的阻尼函数将maxVal1减少到0.1在1。