1

我正在尝试制作我的网站的移动版本,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,即使我这样做了(并且在进行任何删除调用之前)。当您尝试从中删除某些内容时,jplayer.remove 函数是否还依赖于 removeTime 之外的其他内容?

4

2 回答 2

1

我遇到了同样的问题,并在 jPlaylist 文档中找到了答案:http: //jplayer.org/latest/demo-02-jPlayerPlaylist/

“因为第二个命令只有在删除动画时间 removeTime 为零时才有效。”

就我而言,我编写了以下功能来擦除所有歌曲,直到当前歌曲:

创建 jPlaylist 时:

var playlistOptions = {
playlistOptions: {
    enableRemoveControls: true,
    autoPlay: false,
    removeTime: 0
},
...
};
playlist = new jPlayerPlaylist(.......);

以及删除歌曲的功能:

function deleteUpToCurrent(e) {
    while(playlist.current != 0) {
        playlist.remove(0); 
    }
    return false;
}

希望能帮助到你!干杯

于 2016-12-05T14:11:02.040 回答
0

jplayerPlaylist.remove函数中jquery.playlist.js的第355行,有调用JQuery的remove函数:

$(this).remove();

如果你查看 JQuery 的源代码,这是委托给 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);
}

您可能需要调整延迟。

于 2013-10-29T04:04:59.423 回答