如何使用jplayer获取进度事件

时间:2011-02-11 14:35:18

标签: javascript jquery html5 jplayer

我正在使用jQuery 1.5和jPlayer 2.0.0,请忽略这是自动播放音乐的事实,我会在启动之前提供足够的警告,用户必须按一个大按钮才能启动页面我会提供一个很大的停止按钮。

我希望音频文件开始播放,并在页面准备好并加载音频后调用一个函数。

我有以下javascript(我修改了代码,以便更好地理解)。

function FemeMusic() {

    FemeMusic.prototype.addMusic = function(actionAfterMusic) {
        $("#jp").jPlayer({
            ready: function() {
                var jPlayerElement = $(this);
                jPlayerElement.jPlayer('setMedia', {
                    mp3: 'aSongByJamesBlunt.mp3'
                });
                jPlayerElement.bind($.jPlayer.event.progress,
                function(event) {
                    if (event.jPlayer.status.seekPercent === 100) {
                        jPlayerElement.jPlayer("play");
                    }
                    if (actionAfterMusic) {
                        actionAfterMusic.call();
                    }
                });
             },
             swfPath: "/flash",
             preload: "auto"
         });
    }
} 

我有这个功能来触发上面的代码。

$(document).ready(function() {
    var femeMusic = new FemeMusic();
    femeMusic.addMusic(killMyself); 
});

我使用相同的代码但使用$ .jPlayer.event.loadeddata事件而没有if语句而不是$ .jPlayer.event.progress,它在某些浏览器中运行良好但在使用时不兼容闪存,因为它不会激活事件(我在Firefox 3.5中遇到了问题,但我不知道为什么)。以上似乎适用于Firefox

我读了这个

“我建议您使用progress事件,并检查: event.jPlayer.status.seekPercent === 100.“

创作者的这篇文章http://groups.google.com/group/jplayer/browse_thread/thread/9dc9736f9d6947bd?pli=1

有人有任何建议吗?


修改

我没有在chrome和safari中使用它我在Firefox的新版本3.6(我应该首先完成)上测试了它并且它按预期工作,尽管在文档event.progress id中的事实描述为:

  

Flash和HTML5浏览器支持的强大jPlayer事件

并且在上面的链接中,创建者建议使用event.progress来解决浏览器问题我只能假设它是浏览器特定的问题。

很高兴能对此做一些澄清。

2 个答案:

答案 0 :(得分:3)

来自jPlayer的创建者:

所以你的目标是在媒体缓冲后自动播放?

如果你想要简短的回答。算了吧。 x浏览器缓冲是我的 领域。有些人根本找不到它。只需设置媒体播放即可。

如果你真的想尝试去做。然后播放暂停会有所帮助, 因为media.play()是比media.load()更好的x浏览器,即它 操作变化较小。 iOS Safari会完全忽略该游戏 虽然。用户需要点击启动的东西 操作即播放按钮。

最后一点适用于尝试任何形式的自动播放,因此请确保存在 是一个播放按钮可用。 jPlayer界面将不会处理iOS 播放来自浏览器事件的反馈,即停滞不前。

答案 1 :(得分:1)

我在大多数浏览器中使用flash和html5后端的progress事件有问题。据我所知,timeupdate事件的效果要好得多。