setInterval в рамках цикла в Javascript - PullRequest
0 голосов
/ 09 января 2012

Мой код ниже должен быть помещен в setInterval внутри цикла for.Мне нужно сделать 10-секундную паузу между следующей итерацией цикла for.Это для очень простого скрипта, который показывает баннеры в div в течение 10 секунд, прежде чем перейти к следующему.Существующий setInterval - это код, который я получил с другого сайта, когда у меня закончились варианты.Любая помощь?И если вы не против, объясните мне логику, чтобы я знал на будущее:)

$("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);
});

Ответы [ 3 ]

3 голосов
/ 09 января 2012

Вот обновленная версия, основанная на комментарии:

// 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();
2 голосов
/ 09 января 2012

Попробуйте это

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);            
 }

Надеюсь, это решит вашу проблему.

2 голосов
/ 09 января 2012
...