我在创建一个首先会增加值(例如)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。如何做出'复出'的事情?谢谢你的帮助。
答案 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);
正如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);
}
这样,您就不会污染全局命名空间。