Pregunta

I'm creating a page which I want to have multiple playlists for an player.

This is the script, you probably have seen it before:

var audio;
var playlist;
var tracks;
var current;
init();
function init(){
    current = 0;
    audio = $('.player');
    playlist = $('.album_tracks_container');
    tracks = playlist.find('li a');
    len = tracks.length;
    playlist.find('a').click(function(e){
        e.preventDefault();
        link = $(this);
        current = link.parent().index();
        run(link, audio[0]);
        $('.audioplayer').removeClass('audioplayer-stopped');
        $('.audioplayer').addClass('audioplayer-playing');
    });
    audio[0].addEventListener('ended',function(e){
        current++;
        if(current == len){
            current = 0;
            link = playlist.find('a')[0];
        }else{
            link = playlist.find('a')[current];   
        }
        run($(link),audio[0]);
        $('.audioplayer').removeClass('audioplayer-stopped');
        $('.audioplayer').addClass('audioplayer-playing');
    });
}
function run(link, player){
    $('.album_tracks_container').find('.album_tracks_light, .album_tracks_dark').removeClass('album_tracks_active');
    player.src = link.attr('href');
    par = link.parent();
    par.addClass('album_tracks_active').siblings().removeClass('album_tracks_active');
    $('.album_tracks_container').find('.album_tracks_light, .album_tracks_dark').find('.album_tracks_number, .album_tracks_text').removeClass('album_tracks_number-text_active');
    par.find('.album_tracks_number, .album_tracks_text').addClass('album_tracks_number-text_active');
    audio[0].load();
    audio[0].play();
}

Now I want to change that playlist var to something like this (yeah I don't know javaScript but I hope you get what I want to do)

$('a').click(function(){
    playlist = $(this).closest('.album_tracks_container');
});

to append it to the closest div with that class to the link i click.

The reason I need to do this is because I have multiple '.album_tracks_container' in the page, and without a code change it will only select the top one as a playlist (when i play a song in the ones below, next song will continue at the top playlist)

So yeah, I want that playlist var to be = the closest .album_tracks_container to the 'a' (link) I click.

I hope I make sense.

this is the html

<body>
    <div class="player_container">
        <audio class="player" preload="auto" controls>
            <source src="media/playlist1/01.wav"/>
        </audio>
    </div>
    <div class="content_container">
        <div id="A">
            <div class="album_container">
                <div class="album_art playlist1"></div>
                <div class="album_artist_title">
                    <span class="album_artist_title_text">playlist1</span>
                </div>
                <div class="album_album_title">
                    <span class="album_album_title_text">3 songs</span>
                </div>
                <ul class="album_tracks_container">
                    <li class="album_tracks_light">
                        <span class="album_tracks_number">01</span> <span class="album_tracks_text">song 1</span>
                        <a href="media/playlist1/01.wav"></a>
                    </li>
                    <li class="album_tracks_dark">
                        <span class="album_tracks_number">02</span> <span class="album_tracks_text">song 2</span>
                        <a href="media/playlist1/02.wav"></a>
                    </li>
                    <li class="album_tracks_light">
                        <span class="album_tracks_number">03</span> <span class="album_tracks_text">song 3</span>
                        <a href="media/playlist1/03.wav"></a>
                    </li>
                </ul>
            </div>
        </div>
        <div id="C">
            <div class="album_container">
                <div class="album_art playlist2"></div>
                <div class="album_artist_title">
                    <span class="album_artist_title_text">playlist2</span>
                </div>
                <div class="album_album_title">
                    <span class="album_album_title_text">3 songs</span>
                </div>
                <ul class="album_tracks_container">
                    <li class="album_tracks_light">
                        <span class="album_tracks_number">01</span> <span class="album_tracks_text">song 1</span>
                        <a href="media/playlist2/01.wav"></a>
                    </li>
                    <li class="album_tracks_dark">
                        <span class="album_tracks_number">02</span> <span class="album_tracks_text">song 2</span>
                        <a href="media/playlist2/02.wav"></a>
                    </li>
                    <li class="album_tracks_light">
                        <span class="album_tracks_number">03</span> <span class="album_tracks_text">song 3</span>
                        <a href="media/playlist2/03.wav"></a>
                    </li>
                </ul>
            </div>
        </div>
    </div>
</body>
¿Fue útil?

Solución

I'm not sure to understand what you are trying to do with this $('a').click() since there is already a click event registered. Anyway, let me try a guess. What do you think about the following code?

var currentPlaylist;
playlist.find('a').click(function(e){
    e.preventDefault();
    link = $(this);
    current = link.parent().index();
    currentPlaylist = link.closest('.album_tracks_container'); // <<<
    run(link, audio[0]);
    $('.audioplayer').removeClass('audioplayer-stopped');
    $('.audioplayer').addClass('audioplayer-playing');
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top