JavaScript中使用setInterval循环遍历数组?

8

我有一个网站,需要加入新闻滚动条。目前,我有一个数组来填充它,每隔x秒,我希望新闻故事会更换。

function startNews(stories) {

}

我知道你可以使用setInterval,但它必须通过一个新的函数,并且在同一函数中无法指定要触发的特定javascript。您有什么建议吗?
谢谢!
2个回答

23
你应该使用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);

我在 x 中有一个 if 语句 (setInterval("x", 1000);),然后 firebug 给了我一个错误。 - iosfreak
setInterval() 接受一个 JavaScript 函数或字符串作为其第一个参数。它可以是函数名称或匿名函数声明。它也可以是字符串中的代码,但这不是最好的方法。请参见我在答案中添加的示例,使用内联匿名函数。 - jfriend00

10

尽可能使用setTimeout。如果您的函数运行时间超过了间隔时间,就有可能导致CPU使用率一直保持在100%。

尝试以下代码: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


3
为什么你应该使用setTimeout而不是setInterval? - Gisheri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接