我创建了自己的HTML5音频播放器,能够处理播放列表。我创建了一个自定义myPlaylist对象,其中包括所有的play(),pause(),stop()和其他所需的功能。这一切都正常工作,但此外,我需要知道音频文件何时结束以便自动开始播放下一个音频文件。使用HTML5音频和jQuery调用对象(this)的引用
下面的代码的相关部分我使用:
function myPlaylist(){
var player = document.createElement('audio');
var audio = $(player).get(0);
this.next = function next(){
// Picks next song in the playlist and plays it
...
};
$(audio).bind('ended', function() {
alert("Song is finished!");
// Here I want to call to my next() function
});
}
我一直无法弄清楚如何做到这一点。我已经尝试过几种组合,例如$(this).next(),这似乎是最合理的,实际上显示警报,但随后不执行任何操作,也是this.next(),它也显示警报,但随后显示错误,因为this引用HTML5音频元素,它没有next()功能。
我也尝试另一种方法,使用
audio.onended = function(){
alert("Song is finished!");
$(this).next();
};
但那些甚至不触发警报。另外audio.ended不起作用。
所以,我现在基本无能为力,有没有人有任何想法我做错了什么?提前致谢。
哦,我测试过这一切,谷歌Chrome和Safari的最新版本的Mac OS X.
player.addEventListener("ended", function() {
alert("Song is finished!");
$(this).next();
});
而且
player.addEventListener("ended", next);
他们都不工作,虽然第一个正确显示警报。
EDIT 2使用我碰到this question来搜索,这也可能是与我的问题,所以为了摆脱与参考任何可能的麻烦来this,我添加了一个新的变量引用对象本身,所以我现在基本上是与工作:
function myPlaylist(){
var player = document.createElement('audio');
var audio = $(player).get(0);
var me = $(this);
this.next = function next(){
// Picks next song in the playlist and plays it
...
};
$(audio).bind('ended', function() {
alert("Song is finished!");
me.next();
});
}
但后来我得到一个错误,说对象没有一个方法next()。
我不知道还有什么可以尝试...任何额外的信息将不胜感激,谢谢!
+0
事件名称通常不开头的(如在audio.onended),这看起来更像是IE浏览器给我。你有没有尝试audio.ended你的第二个例子? –
2012-03-10 21:11:54
+0
是的,我已经尝试过,同样的结果,警报没有显示。但我不知道事件名称取决于浏览器。谢谢你的提示。 –
2012-03-10 22:24:42