setInterval在javascript中循环遍历数组?

时间:2011-09-16 02:25:05

标签: javascript setinterval

我有一个网站,他们想要一个新闻自动收报机。目前,我有一个填充它的数组,每隔x秒,我想要改变新闻故事。

function startNews(stories) {

}

我知道您可以使用setInterval,但它必须通过一个新函数,并且您不能在同一函数中指定某些javascript来触发它。

你有什么建议?

谢谢!

2 个答案:

答案 0 :(得分:13)

您应该使用setInterval()或重复拨打setTimeout()。这就是你将来某个时候在javascript中做的事情。

使用这些定时器功能可以做什么没有限制。你认为你不能做到这一点是什么让你试图避免它们?

这是一个伪代码示例:

var newsArray = [];   // your code puts strings into this array
var curNewsIndex = -1;

var intervalID = setInterval(function() {
    ++curNewsIndex;
    if (curNewsIndex >= newsArray.length) {
        curNewsIndex = 0;
    }
    setTickerNews(newsArray[curNewsIndex]);   // set new news item into the ticker
}, 5000);

或者可以这样做:

var newsArray = [];   // your code puts strings into this array
var curNewsIndex = -1;

function advanceNewsItem() {
    ++curNewsIndex;
    if (curNewsIndex >= newsArray.length) {
        curNewsIndex = 0;
    }
    setTickerNews(newsArray[curNewsIndex]);   // set new news item into the ticker
}

var intervalID = setInterval(advanceNewsItem, 5000);

答案 1 :(得分:8)

您应该尽可能使用setTimeout。如果您的函数运行时间比间隔长,则可能会遇到100%cpu使用情况。

试试这段代码: http://jsfiddle.net/wdARC/

var stories = ['Story1','Story2','Story3'], 
    i = -1;
(function f(){
    i = (i + 1) % stories.length;
    document.write(stories[ i ] + '<br/>');
    setTimeout(f, 5000);
 })();

document.write替换为您的功能。