如何在HTML5播放器中自动播放下一首歌曲

时间:2014-02-08 16:50:47

标签: javascript jquery html5 audio audio-player

我有一个html5音频播放器,我似乎无法弄清楚如何让我的脚本在当前歌曲结束后自动播放播放列表中的下一首歌曲。目前,播放器播放一首歌然后停止。如果用户也按下快进按钮,则播放器自动播放歌曲也是理想的。

这是我的JS代码:

jQuery(document).ready(function() {

// inner variables
var song;
var tracker = $('.tracker');
var volume = $('.volume');

function initAudio(elem) {
    var url = elem.attr('audiourl');
    var title = elem.text();
    var cover = elem.attr('cover');
    var artist = elem.attr('artist');

    $('.player .title').text(title);
    $('.player .artist').text(artist);
    $('.player .cover').css('background-image','url(' + cover+')');;

    song = new Audio(url);

    // timeupdate event listener
    song.addEventListener('timeupdate',function (){
        var curtime = parseInt(song.currentTime, 10);
        tracker.slider('value', curtime);
    });

    $('.playlist li').removeClass('active');
    elem.addClass('active');
    playAudio();
}
function playAudio() {
    song.play();

    tracker.slider("option", "max", song.duration);

    $('.play').addClass('hidden');
    $('.pause').addClass('visible');
}
function stopAudio() {
    song.pause();

    $('.play').removeClass('hidden');
    $('.pause').removeClass('visible');
}
// play click
$('.play').click(function (e) {
    e.preventDefault();

    playAudio();
});

// pause click
$('.pause').click(function (e) {
    e.preventDefault();

    stopAudio();
});

// forward click
$('.fwd').click(function (e) {
    e.preventDefault();

    stopAudio();

    var next = $('.playlist li.active').next();
    if (next.length == 0) {
        next = $('.playlist li:first-child');
    }
    initAudio(next);
});

// rewind click
$('.rew').click(function (e) {
    e.preventDefault();

    stopAudio();

    var prev = $('.playlist li.active').prev();
    if (prev.length == 0) {
        prev = $('.playlist li:last-child');
    }
    initAudio(prev);
});

// show playlist
$('.pl').click(function (e) {
    e.preventDefault();

    $('.playlist').fadeIn(300);
});

// playlist elements - click
$('.playlist li').click(function () {
    stopAudio();
    initAudio($(this));
});

// initialization - first element in playlist
initAudio($('.playlist li:first-child'));

// set volume
song.volume = 0.8;

// initialize the volume slider
volume.slider({
    range: 'min',
    min: 1,
    max: 100,
    value: 80,
    start: function(event,ui) {},
    slide: function(event, ui) {
        song.volume = ui.value / 100;
    },
    stop: function(event,ui) {},
});

// empty tracker slider
tracker.slider({
    range: 'min',
    min: 0, max: 10,
    start: function(event,ui) {},
    slide: function(event, ui) {
        song.currentTime = ui.value;
    },
    stop: function(event,ui) {}
});
});

2 个答案:

答案 0 :(得分:2)

我想做同样的事情,但我已经很久没能做了。在查找了几个事件监听器后,我终于设法使其工作:D

function playAudio() {
  song.addEventListener('ended', function () {
    var next = $('.playlist li.active').next();
    if (next.length == 0) {
      next = $('.playlist li:first-child');
    }
    initAudio(next);

    song.addEventListener('loadedmetadata', function () {
      playAudio();
    });
  }, false);

  tracker.slider("option", "max", song.duration);
  song.play();
  $('.play').addClass('hidden');
  $('.pause').addClass('visible');
}

将此作为您的playAudio功能。第一个eventlistener将歌曲循环到播放列表中的下一首歌曲。第二个事件监听器用于song.duration,如果我不使用这个eventlistener,它恰好是null(奇怪)。

如果要在单击播放列表元素或前进/后退按钮后立即播放音频,请将其添加到单击播放列表功能和前进/后退功能。

song.addEventListener('loadedmetadata', function() {playAudio(); });

希望这有帮助!!!! (我对帖子的第一个答案:D)

答案 1 :(得分:0)

我认为关键是要在你的音频播放标签上监听(或用jQuery说法“绑定”)“结束”事件。一旦媒体播放结束,这将立即触发。 Mystic Magic引用的示例利用了这一点,因此将该页面搜索为“已结束”以便查看此操作。