canplaythrough在firefox中间歇性地发射

时间:2014-01-14 21:31:08

标签: javascript firefox audio jplayer

我正在尝试为游戏预加载音频文件。我正在使用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,但由于某种原因,他们需要花费数天时间来修改问题。

由于

1 个答案:

答案 0 :(得分:2)

我的问题是我在对元素实例化jPlayer之前绑定了事件。我没有意识到jplayer实际上正在等待自定义事件 - 而不是标准的HTML5事件 - 所以我认为绑定任何地方都可以。你生活和学习。因此,切换for循环中最后两行的顺序可以解决问题。