我正在使用jQuery音频播放器'jPlayer',我有一个循环,它创建了许多jPlayer唯一实例,然后为每个实例分配点击'jPlayer播放'到文档的另一部分..问题是jPlayer使用内部ready: 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;
}
我确信它是关于使用队列但我不知道如何实现它?任何帮助都将非常感激!
答案 0 :(得分:2)
您可以尝试这样的事情:
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的负载百分比。
这只是一个建议,可能需要大量的工作......我从未使用过jPlayer,而且我从文档中盲目飞行所以不要指望它能开箱即用: - )。