Muszę liczyć od 1 do 60, ale chcę liczyć z łagodzeniem, więc na przykład od 1 do 30 z opóźnieniem 100 ms, po czym muszę zwiększyć opóźnienie, więc liczenie będzie stopniowo spowolnić Osiąga 60. To właśnie dotarłem (niewiele):

var i = 0;
var interval = setInterval(function(){
    i += 1;
    console.log(i);
    if(i == 60) {
        clearInterval(interval);
    }
}, 100);
4
passatgt 27 listopad 2013, 14:35

3 odpowiedzi

Najlepsza odpowiedź

Używałbym setTimeout(), coś takiego:

var delay = 100, count = 0;
function delayed () {
    count += 1;
    console.log(count);
    if (count > 30) {
        delay += 10;
    }
    if (count < 60) {
        setTimeout(delayed, delay);
    }
}
delayed();

Demo na żywo w JSFiddle.

5
Teemu 27 listopad 2013, 10:46

Dlaczego nie spowolnić ciągłej? Moim zdaniem znacznie ładniej wygląda. Odpowiednio zaktualizowałem odpowiedź @teemu. Zobacz To skrzypce.

var delay = 0, count = 0;
function delayed () {
    count += 1;
    console.log(count);
    //adjust to influence overall speed
    delay+=5; 
    if (count <60) {
        setTimeout(delayed, delay);
    }
}
3
lex82 27 listopad 2013, 10:54

Oto coś, czego możesz użyć. Trochę matematyki w akcji

var i = 0, a = 0;
var interval = setInterval(function(){
    i += 1;
    a = parseInt(Math.log(i)*Math.log(i)*100, 10);
    print(i, a);
    if(i == 60) {
        clearInterval(interval);
    }
}, 100);

function print(i, a){
    setTimeout(function(){
        console.log(i)
    },a);
}

Zasadniczo wartość a wzrośnie stopniowo. Możesz zaobserwować bardzo niewielką różnicę w czasie Liczba wydruków i

2
Ankur 27 listopad 2013, 10:53