簡體   English   中英

JavaScript setInterval增加和減少變量

[英]JavaScript setInterval increase and decrease variable

我在創建一個變量時遇到問題,該變量首先將值(例如)從0增大到10,然后將其從10增大回0。所以0,1,2,3 ... 10,10,9 ,8,7 ... 0(依此類推)主要思想如下:

var count = 10;

var counter = setInterval(timer, 500); 

function timer() {
  count = count-1;

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

}
console.log(counter);

但是它只會一直從0變為10。 如何使“復出”呢? 謝謝你的幫助。

嘗試更改增量值

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);
}

這是產生正確輸出(具有雙零和十進制)但比@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);

據我了解,這是另一種解決方案:

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;
  }

}

我將使用setTimeout()而不是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);

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);

間隔為jsFiddle的實時演示

使用單獨的end陣列的優點是,可以根據需要動態更改限制。

我看到的問題是

var counter = setInterval(timer, 500); 

setInterval向您返回一個ID,您可以使用該ID來調用clearInterval並停止對timer()的調用序列。 它不會返回計數值。

您想要的,恕我直言是這樣的:

var counter = 10;

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

    if (counter < 0) {
        counter = 10;
    }
    console.log(counter);
}, 500);
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);
}

這樣,您就不會污染全局名稱空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM