2012-01-09 24 views
0

以下のコードは、forループ内のsetIntervalに入れる必要があります。私は基本的に、forループの次の繰り返しの間に10秒の休止を入れる必要があります。これは非常に基本的なスクリプトのために、次のものに移動する前に10秒間divのバナーを表示します。既存のsetIntervalは、オプションを使い果たしたときに別のウェブサイトから降りたコードです。どんな助け?そして、私は将来のために知っているように、あなたが私にロジックを説明する気にしない:)JavaScriptのforループ内の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

ここに基づいて更新されたバージョンですコメント:

// 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(); 
+0

あなたの答えをありがとう。私の唯一の問題は、特定のバナー名に関連付けられたバナーを使用してサーバーからjson配列を取得することです。したがって、サーバーから新しいバナーを取得することはありません。私はa)bannersを得るb)forループを実行し、c)何とか10秒間反復を一時停止すると考えた理由上記の例がこれを行うかどうかはわかりません。 – mauzilla

+0

こんにちはアリエル、あなたの返信をもう一度感謝します。上の例は完璧ですが、私の適切なjsの欠如は私を失望させています:)私はサーバーからレコードを引っ張ってバナー配列にプッシュしています。これらのレコードはjsonのようです。私はgetNextBanner()内にconsole.log(バナー)を作成しました。応答は、多次元配列のバナー[] [0] = jsonオブジェクト、バナー[] [1] = jsonオブジェクトのように見えます。私がvar banner = banners [currentBanner]とconsole.log(banner)を実行すると、私は定義されていません。たとえconsole.log(banner [0])に同じ話をしようとしても。アドバイスはありますか? – mauzilla

+0

アリエル、申し訳ありませんが、私は問題が何であるか知っていると思います。私は$ .post()の中で上記のようなforループを持っているので、$。post()関数の外で別のプロパティとしてバナーを使うことはできません。 $ .post()を使ってサーバーから情報を取得したことはありませんし、他の関数でもそれを使用しています。 – mauzilla

2

を場合は、使用してみてください:

.delay() 

Here is a great example of this function in use!

+1

'.delay()'はアニメーション用に設計されています。それは実際に関数の実行を遅らせるために使用すべきではありません... – Ariel

2

この

をお試しください
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);    
} 

これがあなたの問題を解決することを願っています。