-2

タイマーで数値をインクリメントおよびデクリメントしようとしていますが、コードが機能しません...

var i = 0,
max = 5,
timer = function() {
    if (i<max) {
        i++;
        console.log(i) //ok
    } 

    if (i==max) {
        i--;
        console.log(i) //fail ...
    }

    setTimeout(timer, 60); 
}; 

timer(); 
4

2 に答える 2

4

5に達すると、2番目のifステートメントによって4になり、最初のifステートメントによって5に戻ります。

var i = 0,
max = 5,
dir = 0; // 0 for up, 1 for down.

timer = function() {
    if (dir == 0) {
        i++;
        console.log(i)
    }

    if (dir == 1) {
        i--;
        console.log(i)
    }

    if(i == 0) {
        dir = 0;
    } else if(i == max) {
        dir = 1;
    }
    setTimeout(timer, 60);
}

timer();

方向変数を使用して、カウントの方向を追跡します。

デモ

于 2012-06-15T15:50:14.323 に答える
1

@sachleensのアイデア、少し短いコード

var i = 0, max = 5, cnt = 1;
      timer = function() {
        i += cnt;
        if (i>=max) {cnt = -1;}
        if (i===0)  {cnt = 1;}
        console.log(i);
        setTimeout(timer,60);
      }
timer();
于 2012-06-15T16:13:20.137 に答える