[英]Increase and decrease a variable until a number is reached in Javascript
[英]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);
正如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);
使用单独的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.