![](/img/trans.png)
[英]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.