あなたはこのようなことを試みるかもしれません:
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()
で、配列の最後の要素を取得し、配列から削除することもできます。initPlayer
500ミリ秒ごとにプレーヤーの負荷率をポーリングして、負荷率が100になるまで、呼び出しを待機します。
これは単なる提案であり、多くの作業が必要になる可能性があります... iveはjPlayerを使用したことがなく、ドキュメントから盲目的に飛んでいるので、箱から出してすぐに機能することを期待しないでください:-)。