2

私は jQuery オーディオ プレーヤー「jPlayer」を使用しています。多数の jPlayer の一意のインスタンスを作成し、クリックすると「jPlayer play」を各インスタンスのドキュメントの別の部分に割り当てるループがあります。問題は、jPlayer がinternalready: function() {}を使用してオーディオ パスを割り当て、ファイルをロードします。ループを続行する前に、この関数が終了するのを待つ必要があります。

擬似コードは次のようなものです。

for loop{

create jPlayer div;

instantiate jPlayer and assign audio file in the ready(); // need to wait before continuing

assign an on click event to play file;
}

キューの使用に関するものだと確信していますが、実装方法がわかりませんか? どんな助けでも大歓迎です!

4

1 に答える 1

3

あなたはこのようなことを試みるかもしれません:

function initPlayer(playerQueue){
  if(playerQueue.length > 0) {
    var player = playerQueue.pop(); // get our options hash for this iteration
    var container = $('<div id="'+player.container+'"></div>').appendTo('body');

    $(container).jPlayer({
      ready: function(){
        var _e = this.element;
        _e.jPlayer('setFile', player.file);
        var timer = setInterval(function(){
            if(_e.jPlayer('getData', 'diag.loadPercent') == 100){
               $(player.control).click(function(){
                  // assign your handler
               });
               clearInterval(timer); // clear the interval
               initPlayer(playerQueue); // invoke the next player init
            }
        },500);
      },
      /* ... other options ... */
    });
  }
}

initPlayer([
  {container: 'audio-1', file: 'uri/for/file', control: '#button-1'},
  {container: 'audio-2', file: 'uri/for/file', control: '#button-2'},
  {container: 'audio-3', file: 'uri/for/file', control: '#button-3'},
  {container: 'audio-4', file: 'uri/for/file', control: '#button-4'}
]);

基本的に、明示的なループを取り除き、代わりにready関数自体を使用して、initPlayer関数を介してビルドの反復を進めます。配列を使用することpop()で、配列の最後の要素を取得し、配列から削除することもできます。initPlayer500ミリ秒ごとにプレーヤーの負荷率をポーリングして、負荷率が100になるまで、呼び出しを待機します。

これは単なる提案であり、多くの作業が必要になる可能性があります... iveはjPlayerを使用したことがなく、ドキュメントから盲目的に飛んでいるので、箱から出してすぐに機能することを期待しないでください:-)。

于 2010-09-25T17:35:53.590 に答える