JavaScript setInterval增加和减少变量

时间:2013-08-18 13:19:22

标签: javascript

我在创建一个首先会增加值(例如)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。如何做出'复出'的事情?谢谢你的帮助。

6 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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);

答案 2 :(得分: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;
  }

}

答案 3 :(得分:1)

我使用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);

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数组的优点是,如果需要,您可以动态更改限制。

答案 4 :(得分:0)

我看到的问题在于

var counter = setInterval(timer, 500); 

setInterval返回一个ID,然后您可以使用该ID调用clearInterval并停止对timer()的调用序列。它不会返回count的值。

你想要什么,恕我直言是这样的:

var counter = 10;

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

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

答案 5 :(得分: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);
}

这样,您就不会污染全局命名空间。