跳转到 BarUI 播放列表中的曲目 SoundManager2

Jump to track in BarUI playlist SoundManager2

所以我一直在网上搜索这个,但没有找到一些合适的文档或有启发性的答案。我正在尝试构建一个小型的在线音乐播放器来获得乐趣,但在跳转到 BarUI 播放列表中的特定曲目这一简单任务上遇到了困难。作为参考,here 是 SoundManager2 页面上的 BarUI 参考。

添加一些关于我的特定问题的细节:

谁能教教我如何从BarUI的播放列表跳转到曲目或播放曲目? (我想这应该只是知道要调用哪些函数的问题,因为我可以通过向下滚动到曲目并单击播放按钮来手动执行此操作)

我希望这不是一个非常愚蠢的问题。如果我想出一些有用的东西,我会继续尝试并 post 提出答案。谢谢

所以在阅读和搜索之后(找到了非常非常有用的 SoundManager2 here 社区论坛),我发现 Bar UI 仍在进行中(那里还没有合适的 API 并且缺少一些功能)。

我最终模拟了 link 上的点击事件,并将我的 li 曲目元素添加到 Bar UI 播放列表中。我确定一定有某种方法可以 call/expose bar-ui.js 中的方法,但我发现这是最直接的方法。对于更复杂的任务,可能需要直接编辑 bar-ui.js 文件。

所以,我所做的是:

  • 将曲目(li 元素)附加到当前播放列表

        // I'm doing an Ajax call to retrieve the tracks data (JSON or sth)
        // and place it in appropriate variables, in my case trackName...
        var trackName = data.TrackName;
        var trackUrl = data.TrackStreamUrl;
        var trackId = data.Id;
        var trackListItemHtml = '';
    
        // if this is the first track from the bunch of tracks we are 
        // about to add, we want it to be selected in the playlist 
        // and begin play from here
        if (selectedToPlayNext) {
            $('.sm2-playlist-bd li').removeClass('selected');
            trackListItemHtml = '<li class="selected"><a id="selected_track_link"  href="' + trackUrl + '"><b>' + trackName + '</b></a></li>';
        } else {
            // else, we want basic li elements containing links to the tracks
            trackListItemHtml = '<li><a href="' + trackUrl + '"><b>' + trackName + '</b></a></li>';
        }
    
        // append new track to our playlists
        $('.sm2-playlist-wrapper .sm2-playlist-bd').append(trackListItemHtml);
    
  • 开始播放新添加的曲目(从最上面开始,即选中)

         // we do this using plain Javascript (instead of JQuery selectors)
         // because for some reason JQuery doesn't want to trigger click 
         // event on plain text inside a **html link** element
         document.getElementById('selected_track_link').click();
    

可能不是最好的方法,但它确实起到了作用。不过,我们将不胜感激(用于在 Bar UI 播放列表中随机播放或以编程方式触发下一个播放列表,而无需与播放器进行实际交互)

很好,经过几个小时的调整,它对我有很大帮助,我注意到 bar-ui 暴露了播放器对象,但它似乎无法使用,对象是

window.SM2BarPlayer

我想指出的一件事是,您必须检查 ID selected_track_link 是否存在,如果它存在,我们必须在附加到 dom 之前将其删除,所以我这样做了 :

if($("#selected_track_link").length > 0){
    $("#selected_track_link").remove();
}

$('.sm2-playlist-bd li').removeClass('selected');

希望对大家有所帮助

我在 mediaElemet.js 之上创建了一个全宽响应式音频播放器,请在此处查看,因为它满足了我们的需求 https://github.com/razzbee/audioElement.js

这是我对上述问题的回答。 jQuery(".songs").on("click",function(){ 变种发现= 0; // 检查歌曲是否已在播放列表中,如果不在播放列表中则为 0,如果已在播放列表中则为 1...

            var thiss = jQuery(this);
            jQuery(".sm2-playlist-wrapper .sm2-playlist-bd li a").each(function(index, element) { //to check each li item in playlist to match the url of clicked anchor tag if it matches the url in playlist then found become 1
                if(jQuery(this).attr("href")==thiss.data('link')){
                    found = 1;  
                }
            });

            if(found==0){ //if clicked element is not in playlist already

                jQuery("#selected_track_link").removeAttr("id");
                jQuery(".sm2-playlist-wrapper>.sm2-playlist-bd").append("<li><a class='selected' id='selected_track_link' href='"+jQuery(thiss).data('link')+"'>"+jQuery(thiss).data('title')+" - "+jQuery(thiss).data('artist')+"</li>");
                jQuery(".sm2-playlist-wrapper>.sm2-playlist-bd li").removeClass("selected");

                document.getElementById('selected_track_link').click(); 



            }else{ // if clicked element already in playlist then remove the selected song and assign playing to clicked song
                jQuery(document).find("#selected_track_link").removeAttr("id");
                jQuery(".sm2-playlist-wrapper>.sm2-playlist-bd li").removeClass("selected");
                jQuery(".sm2-playlist-wrapper .sm2-playlist-bd li a").each(function(index, element) {
                if(jQuery(this).attr("href")==thiss.data('link')){
                        jQuery(this).attr("id","selected_track_link");
                        jQuery(this).closest("li").addClass("selected");
                    }
                });
                document.getElementById('selected_track_link').click();
            }



        });

为此苦苦挣扎了一段时间,发现上述解决方案工作正常,尽管 bar-ui.js 中似乎内置了一个函数可以执行此操作。

直接打电话

window.sm2BarPlayers[0].actions.play(j)

其中 j 是您的曲目在播放列表中的位置。