javascript - 可以在 Firefox 中通过间歇性触发来播放

标签 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 群组,但由于某种原因,他们花了很多天的时间来修改问题。

谢谢

最佳答案

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

关于javascript - 可以在 Firefox 中通过间歇性触发来播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21124443/

相关文章:

audio - 将音频效果(混响等)添加到 BackgroundAudioPlayer 驱动的流式音频应用程序

javascript - 在前端解析 HTML 是一种不好的形式吗?

javascript - Angular 单元测试类型错误: Cannot read property 'subscribe' of undefined

firefox - 使用 Firebug 检测网页上的错误

css - 为什么 Safari 在媒体查询中计算 REM 的方式与其他浏览器不同?

android - Android上的音频合成?

audio - ffmpeg 在尝试通过音频循环视频时卡住

javascript - 如何保持 C# 和 Javascript 代码同步?

javascript - 如何使 JavaScript 中的元素恢复为不可编辑状态?

c - 将 Firefox 重定向到本地主机上的代理