1

我在创建一个变量时遇到问题,该变量首先会将值(例如)从 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。如何让那个'卷土重来'的东西?谢谢你的帮助。

4

6 回答 6

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);
}
于 2013-08-18T13:33:54.350 回答
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);
于 2013-08-18T14:40:07.647 回答
1

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

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

于 2013-08-18T14:00:29.397 回答
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;
  }

}
于 2013-08-18T13:47:03.207 回答
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);
}

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

于 2013-08-18T14:08:00.510 回答
0

我看到的问题是在线

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);
于 2013-08-18T13:29:40.780 回答