我正在尝试为游戏预加载音频文件。我正在使用Jplayer。我有一个叠加层,一旦所有音频被预加载就会被删除。在Firefox中,有时候canplaythrough会被解雇,有时则不会。我有五个音频文件,有时我得到三个可以播放的事件,有时四个,不经常我得到所有这些。如果我记录哪些工作正常,则不会在相同的音频文件上触发或不触发事件。
我试图尽可能地破解代码。在这里,我为每个音频文件添加一个新的Jplayer实例,我仍然遇到同样的问题。
{
for(var i = 0; i < _timeOutAudioFilesToLoad; i++){
c = i + 1;
var elid = "timeOutAudio"+c;
var elt = '<div id="'+elid+'" class="audioPlayer audio-player" data-audio-file="/themes/foo/sounds/time'+c+'.mp3"></div>';
$("#jPlayers").append(elt);
$("#"+elid).jPlayer( {
swfPath: "/themes/foo/js/libs/jPlayer250/Jplayer.swf"
});
}
}
{
$(".audioPlayer").each(function(){
var audioFile = $(this).attr("data-audio-file");
$(this).bind($.jPlayer.event.canplaythrough, function(event) {
_loadWatcher();
});
$(this).jPlayer("setMedia", {mp3: audioFile});
})
}
_loadWatcher()函数被某些人调用,而不是其他人调用。
我做错了吗?或者这是一个解决方法的错误?我已经尝试过Jplayer Google Group,但由于某种原因,他们需要花费数天时间来修改问题。
由于
答案 0 :(得分:2)
我的问题是我在对元素实例化jPlayer之前绑定了事件。我没有意识到jplayer实际上正在等待自定义事件 - 而不是标准的HTML5事件 - 所以我认为绑定任何地方都可以。你生活和学习。因此,切换for循环中最后两行的顺序可以解决问题。