繁体   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