0

ajaxを介してvimeoとyoutubeの両方のプレイリストAPIをロードすることに依存するビデオプレーヤーを作成しています。それらがロードされたら、YouTube の場合、プレイリスト内のすべてのビデオをループし、各ビデオのデータ API を呼び出して変更日を取得する必要があります。すべての vimeo ビデオが読み込まれ、すべての youtube ビデオが読み込まれ、作成日が表示されたら、jquery を使用して並べ替える必要があります。

これらのプロセスがいつ完了したかを検出する最良の方法を探しています。問題は、vimeo 機能と youtube 機能の両方が完了するまで、並べ替えを実際に開始できないことです。私が思いついた最善の方法は、2 つのブール値フラグのステータスをチェックする setInterval 関数を実行することでした。たとえば、次のようになります。

var youtubeReady = false, vimeoReady = false;
var videoStatusInterval = setInterval("checkVideoStatus",1000);

function checkVideoStatus(){
  if (youtubeReady === true && vimeoReady === true){
    sortVideos();
  }
}

問題は、これが定期的に (この例では 1 秒ごとに) しか実行されないことです。両方の条件が満たされると、これを瞬時に実行する方法があるはずです。誰にもアイデアはありますか?

4

2 に答える 2

1

私は Youtube の API や Vimeo に精通していません。 、両方が true の場合、次のように実行します。

    //Let's createa a couple of custome events to simulate the real ones, comming from Youtube and Vimeo.
var youtube = document.createEvent('Event'),
    vimeo  = document.createEvent('Event');

youtube.initEvent('youtubeReady');
vimeo.initEvent('vimeoReady');

/*
* This function will be use to run YOUR code, ONCE BOTH events are triggered.
* As said, functions are objects so, as any object in JS, you can add fields at any time you want.
* Check this page in Mozilla's Developer Network for more detail:  http://goo.gl/Pdvpk */
function sourcesReady(){
  if(sourcesReady.youtube && sourcesReady.vimeo){
        alert('Both sources ready!');
  }
  else if(sourcesReady.youtube){ 
    alert('Only Youtube ready!');
  }
  else if(sourcesReady.vimeo){ 
    alert('Only Vimeo ready!');
  }
}

//Let's set a couple of event handlers for the 'ready' events, these handlers will set the flags that we need.
document.addEventListener('youtubeReady', function youtubeReadyHandler(){
  sourcesReady.youtube = true; //We set/create the field in the function, that is, the function ITSELF has the field, not the 'this'.
  sourcesReady(); //We call it to evaluate the condition.
}, true);

document.addEventListener('vimeoReady', function vimeoReadyHandler(){
  sourcesReady.vimeo = true; //same as before.
  sourcesReady(); //We call it to evaluate the condition.
}, true);

document.dispatchEvent(youtube);
document.dispatchEvent(vimeo);

この提案が役立つことを願っています。=)

于 2013-01-07T16:16:49.440 に答える
0

これらのアクションは非同期で実行されますが、引き続きグローバル変数を作成できます。

var youTubeScanDone = false, vimeoScanDone = false;

次に、これらの変数を設定しますtrue。関数function sortVideoList() { ... }を作成し、各スキャンの最後に次のような行を呼び出します

if (youTubeScanDone && viemoScanDone) sortVideoList();

この行を呼び出す前に、ブール値を true に設定してください (使用しているスキャン関数によって異なります)。

于 2013-01-07T16:20:08.377 に答える