Javascript 根据计数器增加进度条

Javascript 根据计数器增加进度条,javascript,html,progress-bar,Javascript,Html,Progress Bar,如何让进度条根据计数器值更改“速度”或设置间隔?例如,如果条数小于40,那么做这个,或者小于60,那么做那个,依此类推 我试图在进度条达到40%后减慢进度,然后再进一步降低到60% var counter = 0; var timer = setInterval(function () { if (counter <= '40') { progressLoading.val(counter); counter = counte

如何让进度条根据计数器值更改“速度”或设置间隔?例如,如果条数小于40,那么做这个,或者小于60,那么做那个,依此类推

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

var counter = 0;
var timer = setInterval(function () {
        if (counter <= '40') {
            progressLoading.val(counter);
            counter = counter += 1;
        } else {
            clearInterval(timer);
        }
    }, 20);
var计数器=0;
变量计时器=设置间隔(函数(){

如果(计数器在控制台中运行以下命令,看看这是否是您想要的效果

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);
Math.sin
函数总是返回一个介于
-1
+1
之间的数字。我们只需要正数,所以我们将它传递给
Math.abs
。这使得
因子
始终介于
0
1
之间

此外,数字可能太小,因此因子值可能不重要。为了确保不会发生这种情况,我们将最小值设置为
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);
var计数器=0;
var系数=1;
var maxVal=1;//穿过40后“factor”的最大值
var minVal=0.1;//maxVal的最小值`
var阻尼=60;//maxVal的阻尼`
变量计时器=设置间隔(函数(){
console.log(Math.ceil(counter));//在此处调用函数。
计数器=计数器+系数;
如果(计数器>40&&计数器<100){
最大值=数学最大值((100-计数器)/阻尼,最小值)
因子=Math.min(Math.max(Math.abs(Math.sin(100-计数器)),0.1),maxVal);
}否则,如果(计数器>100){
清除间隔(计时器);
}
}, 20);

这一个是以上两者的组合。在第二个函数中,
因子可以是
0
1
之间的任何值。上述函数确保
因子
介于
0
maxVal
之间,我们使用阻尼将
maxVal
1
降低到
0.1
在1中使用的函数。

添加,比如说
0.2
来抵消?很好。如果这是合适的,请接受答案。有没有办法给阻尼添加一些“不规则性”——使其加速和减速,模仿真实的进度条?在第二段中尝试将
0.1
设置为
0.05
。这些不是ab乐用在一起,使因子仍在逐渐减少,但也有不规则性?
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);