2013-08-18 165 views
1

我有一個問題,首先將增加值(例如)形式0到10,然後它將從10回到0. 因此0,1,2 ,3 ... ... 10,10,9,8,7 0(等) 主要的想法是這樣的:JavaScript setInterval增加和減少變量

var count = 10; 

var counter = setInterval(timer, 500); 

function timer() { 
    count = count-1; 

    if (count == 0) { 
     count = 10; 
    } 

} 
console.log(counter); 

但它只會從0到10的所有時間去。如何做出'復出'的事情?謝謝你的幫助。

+0

只是不'數模'0'其中,在Javascript中,會看起來像:'count%10'。 – jeremy

回答

2

嘗試改變增值

var count = 10; 
var counterIncrement=-1; 
var counter = setInterval(timer, 500); 

function timer() { 
    count = count+counterIncrement; 
    if (count == 0 || count == 10) { 
     counterIncrement = -counterIncrement; 
    } 
    console.log(count); 
} 
0

,我看到的問題有,在線路

var counter = setInterval(timer, 500); 

的setInterval正在返回你的ID,然後可以用它來調用clearInterval並停止呼叫定時器的序列()。它沒有給你返回數值。

你想要什麼,恕我直言,是這樣的:

var counter = 10; 

setInterval(function() { 
    counter = counter - 1; 

    if (counter < 0) { 
     counter = 10; 
    } 
    console.log(counter); 
}, 500); 
+0

@ DevZer0已經提到過,但這不是真正的問題。他想避免從「0」跳到「10」,而是增加10次。 – Bergi

1

這裏是另一種解決辦法,因爲我明白:

var count = 0; 
var flag = false; 
setInterval(function(){timer()}, 500); 

function timer() { 
    console.log(count); 
    if (flag){ 
    count = count - 1; 
    } 
    if(!flag){ 
    count = count + 1; 
    } 

    if (count =< 0) { 
    flag=false; 
    } 
    if (count >= 10) { 
    flag = true; 
    } 

} 
+0

+1,但直接傳遞函數:'setInterval(timer,500)' – Bergi

1

我'd使用setTimeout() s而不是setInterval(),如下所示:

var count = 0, dir = 1, end = [0, 10], index = 1, counter, 
    timer = function() { 
     console.log(count); 
     if (count === end[index]) { 
      dir = -dir; 
      index += dir; 
      counter = setTimeout(timer, 500); 
      return; 
     } 
     count += dir; 
     counter = setTimeout(timer, 500); 
    }; 
counter = setTimeout(timer, 500); 

A live demo at jsFiddle

而作爲BERGI說,還與setInterval()

var count = 0, dir = 1, end = [0, 10], index = 1, 
    counter = setInterval(function() { 
     console.log(count); 
     if (count === end[index]) { 
      dir = -dir; 
      index += dir; 
      return; 
     } 
     count += dir; 
    }, 500); 

A live demo with interval at jsFiddle

使用單獨的end數組的優點是,如果需要,您可以動態更改限制。

+0

它沒有任何區別,是嗎? – Bergi

+0

@Bergi它的確如此,它讓你控制流程,並且延遲地在日誌中添加雙「10」和「0」。請注意「問題中的'0,1,2,3 ... 10,10,9,8,7 ... 0',看起來像我的答案是唯一一個照顧這個的。 – Teemu

+0

我的意思是'setTimeout'。你的函數也可以和'setInterval(timer,500)'一起工作。 – Bergi

0
var count = 10; 
var counter = setInterval(timer, 500); 

function timer() { 
    if(!this.diff) this.diff=-1; 
    count += this.diff; 

    if(count==0 || count==10) this.diff=-this.diff; 

    console.log(count); 
} 

這樣,你不污染全局命名空間。

+0

從'setInterval''調用的函數*中使用'this'會污染全局名稱空間,這與OPs代碼相反。 – Bergi

2

下面是產生正確的輸出(帶一倍零和十位),但比@更短的另一種解決方案Teemu的一個:

var count = 0, step = 1; 
var counter = setInterval(function() { 
    if (count<0 || count>10) // when we're outside the range 
     count += step *= -1; // change direction and go back into 
    console.log(count); 
    count += step; 
}, 500);