Javascript中for循环内的setInterval

Javascript中for循环内的setInterval,javascript,jquery,for-loop,setinterval,Javascript,Jquery,For Loop,Setinterval,我下面的代码需要在for循环中放入setInterval。我基本上需要在for循环的下一次迭代之间暂停10秒。这是一个非常基本的脚本,在进入下一个脚本之前,在div中显示横幅10秒。这是我从另一个网站上得到的代码,因为我没有选择了。有什么帮助吗?如果你不介意向我解释一下逻辑,让我知道未来: $("document").ready(function() { // bannerChange function bannerChange(banner,div,milliseconds) { v

我下面的代码需要在for循环中放入setInterval。我基本上需要在for循环的下一次迭代之间暂停10秒。这是一个非常基本的脚本,在进入下一个脚本之前,在div中显示横幅10秒。这是我从另一个网站上得到的代码,因为我没有选择了。有什么帮助吗?如果你不介意向我解释一下逻辑,让我知道未来:

$("document").ready(function() {

// bannerChange
function bannerChange(banner,div,milliseconds) {
    var length = banner.length;
    for(i=0;i<length;i++) {
        (function(i) {
            setInterval(function() {
                var url = banners[i].url;
                var img = banners[i].image;
                $("#"+div).html("<a href='"+url+"' target='_Blank'><img src='www/images/banners/"+img+"' /></a>");
            },milliseconds)
        })(i);
    }
}

function showBanner(bannerName, bannerDiv, milliseconds) {
    var url = "www/scripts/ajax/getBanners.php";
    $.post(url, {name: bannerName}, function(data) {
        if(data.response == true) {
            bannerChange(data.banners,bannerDiv,milliseconds);
        }
    });
}

// Run banners
showBanner("Test Banner","test",10000);
});
尝试使用:

.delay()

以下是基于评论的更新版本:

// Start by getting the banners:

var banners = [];
var currentBanner;

function getBannersFromServer(...) {
    // TODO: make ajax call to server for banners

    // push the banners into a queue for later
    for (var i in bannerFromServer) {
        banners.push(bannersFromServer[i]);
    }
}

// Then run through them:

function showNextBanner() {
    // advance to next banner
    currentBanner++

    // go back to the beginning after the last banner is displayed
    if(currentBanner >= banners.length) currentBanner = 0;

    // pull a banner out of the queue
    var banner = banners[currentBanner];

    // TODO: Show the banner in the div

    // do it again in 10 seconds
    showNextBanner();
}

// start it all
getBannersFromServer();
getNextBanner();
试试这个

var i=0;//Global Variable

function bannerChange(banner, div, milliseconds) {
    var length = banner.length;

    setInterval(function() {
        var url = banners[i].url;
        var img = banners[i].image;

        $("#"+div).html("<a href='"+url+"' target='_Blank'><img src='www/images/banners/"+img+"' /></a>");

        i++;
        if(i >= length) i=0;//To reiterate from first
    },milliseconds);            
 }

希望这能解决您的问题。

谢谢您的回答。我唯一的问题是,我正在从服务器获取一个json数组,其中的横幅与特定的横幅名称关联,因此,我不会从服务器获取新的横幅。这就是为什么我认为a获取横幅b运行for循环,然后c以某种方式暂停迭代10秒。我不确定你上面的例子是否能做到这一点?嗨,阿里尔,再次感谢你的回复。上面的例子很完美,但我缺乏正确的js让我失望:我正在从服务器中提取toe记录并将其推送到banners数组中。这些记录似乎是json。我在getNextBanner中做了一个console.logbanners。响应似乎是一个多维数组banners[][0]=json对象,banners[][1]=json对象等。奇怪的是,如果我使用var banner=banner[currentBanner]和console.logbanner,我就没有定义。即使我尝试console.logbanner[0]也会出现同样的情况。有什么建议吗?艾丽儿,对不起,我想我知道问题是什么。我在$.post中有上面提到的for循环,因此实际上我不能在$.post函数之外使用横幅作为其他属性。我从未使用$.post从服务器检索信息并将其用于其他功能,这可能吗?让它工作吧!我在$.post中移动了getNextBanner,并在其后创建了一个间隔,因此它运行函数一次,然后设置间隔,每10秒运行一次函数。工作起来很有魅力!非常感谢你!。延迟是为动画设计的。它实际上不应该用来延迟函数的执行。。。