我试图制作我网站的移动版本,而jplayer功能与我的主网站非常相似。根据您所在的页面更新播放列表,从播放列表中删除除当前正在收听的歌曲之外的所有歌曲,然后页面动态添加您正在查看的页面中的歌曲。
它在我的主页面上运行正常,但我的移动版本(几乎是相同的代码)无效。
我设置jplayer_playlist.option("removeTime", 0);
就像jplayer文档建议的那样,但它不起作用。这是我的一些代码,所以你可以看到我正在做的事情。
function reload()
{
var current = jplayer_playlist.current;
for(var i = 0; i < current; i++)
{
deleteSong(0);
}
var length = theTitles.length;
for(var i = 0; i < (length - 1); i++)
{
deleteSong(1);
}
}
function deleteSong(index)
{
if(!jplayer_playlist.remove(index))
{
console.log("Could not delete it.");
}
}
第一次删除不会显示错误消息,但第二次删除(以及之后的每次删除)都会显示错误消息。好像它没有意识到我将removeTime
设置为0,即使我做了(并且在进行任何删除调用之前)。除了removeTime之外,当你试图从中删除某些内容时,jplayer.remove函数还有什么依赖吗?
答案 0 :(得分:0)
在jplayerPlaylist.remove函数的jquery.playlist.js的第355行,调用了JQuery的remove函数:
$(this).remove();
如果查看JQuery的source,则会将其委托给DOM方法
elem.parentNode.removeChild( elem );
在现代浏览器中,这个DOM操作是异步的,即它立即返回,但实际上删除DOM元素需要时间。因此,jplayerPlaylist.remove()方法在实际删除节点之前返回。不幸的是,没有回调。所以唯一的解决方法是setTimeout。
var DELAY = 10;
function reload()
{
var current = jplayer_playlist.current;
var length = jplayer_playlist.playlist.length;
if (current > 0)
deleteSong(0);
else if (length > 1)
deleteSong(1);
if (length > 1)
window.setTimeout(reload, DELAY);
}
您可能需要调整DELAY。