我的播放器播放列表删除功能不起作用

My jplayerplaylist remove function isn't working

本文关键字:功能 不起作用 删除 播放列表 播放器 我的      更新时间:2023-09-26

我正在尝试制作我的网站的移动版本,jplayer功能与我的主网站非常相似。播放列表会根据您所在的页面进行更新,并且除了您当前正在收听的歌曲之外的所有歌曲都将从播放列表中删除,然后页面会动态添加您正在查看的页面中的歌曲。

它在我的主页上工作正常,但我的移动版本(几乎是相同的代码)不起作用。

我按照 jplayer 文档的建议设置jplayer_playlist.option("removeTime", 0);,但它不起作用。这是我的一些代码,所以你可以准确地看到我在做什么。

    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 函数是否还取决于你尝试从中删除某些内容?

我遇到了同样的问题,并在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;
}

希望对您有所帮助!干杯

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

$(this).remove();

如果你查看 JQuery 的源代码,这被委托给 DOM 方法

elem.parentNode.removeChild( elem );

在现代浏览器中,这种 DOM 操作是异步的,即它立即返回,但实际上删除 DOM 元素需要时间。因此,jplayerPlaylist.remove() 方法在节点实际被删除之前返回。不幸的是,没有回调。因此,唯一的解决方法是设置超时。

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);
}

您可能需要调整延迟。