繁体   English   中英

我如何使setInterval暂停其中的for循环?

[英]How would I make setInterval pause the for loop it is in?

http://jsfiddle.net/xDWLQ/

JavaScript:

var quotes = new Array();
quotes[0] = "message 0";
quotes[1] = "message 1";

var qText = document.getElementById('qText');
for (i = 0; i < quotes.length; i++) {
    setInterval(function() { qText.innerHTML = quotes[i]; }, 2000);
}​

HTML:

<p class="qText" id="qText">Predefined text</p>​

qTextinnerHTML更改为undefined,而不是变成quotes[0] ,然后是quotes1 现在,我尝试通过使用setInterval函数内的alert()给我提供for循环的索引对其进行调试,并且两次均表示为“ 2”。 因此,如何暂停for循环而不是setInterval创建新线程并增加索引?

您将需要一种完全不同的方法:

var quotes = ["message 0", "message 1"];
var qText = document.getElementById('qText');
var i = 0;

var update = function() {
    qText.innerHTML = quotes[i++ % quotes.length];
};

update();
setInterval(update, 2000);

我认为这是您想要的,而不是循环。

var quotes = ["message 0", "message 1"];
var qText = document.getElementById('qText');
var i = 0;
var len = quotes.length;

setInterval(function() {
   qText.innerHTML = quotes[i++];
   if (i === len) i = 0; 
}, 2000);

您可以通过调用setInterval以及传递给函数的参数列表来强制将正确的变量传递给函数(在jsfiddle上测试)

setInterval(function(q) { qText.innerHTML = q; }, 2000, quotes[i]);

setInterval已经在创建一个循环,它的所有迭代都将在每n毫秒后运行一次(在您的情况下为2000)。如果在循环中调用setInterval,则其内容将在每n毫秒内运行一次。 您只需要调用一次即可。 请注意,JavaScript在浏览器中不是多线程的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM