2011-12-20 7 views
0

2つのapisを読み込む必要があります。ロードされたときにonYouTubePlayerReadyを呼び出すYouTube APIと、ロードされたときにsoundManager.onready(...)を呼び出すSoundManager用の別のAPI。私はこれらのサイトの準備のためにこれらのそれぞれの多くのものを行うready関数。しかし、私は両方とも完全にロードする必要があるより多くの初期化を行うことができるように両方が完了したことを知る必要があります。これらの両方の関数が呼び出されたときに呼び出される関数をどのように持っているか考えてみましょうか?javascriptで複数のonLoadイベントが完了したことを通知する

答えて

2

両方のコールバックを使用します。

var callback = (function(){ 

    var count = 0; 

    return function(){ 
     count++; 
     if(count === 2){ 
      //both ran and do something 
     } 
    } 

})(); 

は、その後、両方のonloadsの終わりにちょうどん:そのif文で

callback(); 

事が唯一の二度目に私が呼ばSこの機能を実行します。

小フィドルのデモ:

var aDone = false; 
var bDone = false; 

function whenADone(){ 
    // do your other stuff 

    aDone = true; 

    if(bDone) whenBothDone(); 
} 

function whenBDone(){ 
    // do your other stuff 

    bDone = true; 

    if(aDone) whenBothDone(); 
} 
+0

をシミュレートフィドル – Raynos

+0

@Raynos例えば笑私もそのアプト知りませんでした:-P – Neal

+0

ありがとう!魅力のように働いた:) – Alexis

1

おそらくDeferedの方が良い方法ですが、これは簡単であり、うまくいくはずです。ロードしたものとロードしなかったものを追跡してください。

var status = { 
    youtube: false, 
    sound: false 
}; 

var loaded = function() { 
    if (!status.youtube) return; 
    if (!status.sound) return; 

    // load stuff! 
}; 

var onYoutubePlayerReady = function() { 
    status.youtube = true; 
    loaded(); 
}; 

soundManager.onready = function() { 
    status.sound = true; 
    loaded(); 
} 
0

あなたのreadysの両方があり、その後真にそれらの$(document).ready(function() { if (youTube === true && soundManager === true) { // Do stuff }});

1

に対するテストをブール値を設定している可能性が:ちょうどカップルのフラグを設定http://jsfiddle.net/maniator/2X8rF/

+0

これも役立つのを助けるために幸せ。答えに感謝します。 – Alexis

0

のjQueryを使用している場合、延期を見てみましょう:

http://www.erichynds.com/jquery/using-deferreds-in-jquery/

http://api.jquery.com/category/deferred-object/

おかげjQuery deferredを使用して

+1

リンクのみの回答は役に立たないので、この場合に遅延がどのように役立つかを説明してください。リンクは問題ありませんが、あなたが何を意味するのかを知るには別のページに行く必要はありません。さらなる説明のためのリンクは問題ありません。 –

1

を、あなたはそれぞれのレディ機能のための約束を構築し、それらを組み合わせることができjQuery.whenを使用して最終的な動作をトリガします。

function promiseYoutube() { 
    var dfd = $.Deferred(); 
    window.onYoutubePlayerReady = function() { 
     console.log("Youtube"); 
     dfd.resolve(); 
    }; 
    return dfd.promise(); 
} 

function promiseSoundManager() { 
    var dfd = $.Deferred(); 
    window.soundManager.onready = function() { 
     console.log("SoundManager"); 
     dfd.resolve(); 
    }; 
    return dfd.promise(); 
} 

$.when(promiseYoutube(), promiseSoundManager()).then(function(){ 
    console.log('Youtube+SoundManager'); 
}); 

、あなたは(https://github.com/Raynos/after.js)[後]衣替えこれらのコールバックにhttp://jsfiddle.net/nikoshr/hCznB/

+0

非常にクールです。偉大な答えをありがとう。それはうまくいくかもしれませんが、問題のためにもう少し複雑です。私は間違いなくこのことを覚えています。ありがとう。 – Alexis

関連する問題