上一首歌曲播放完毕后自动播放下一首
audio auto play next song when previous is finished
我想创建一个音频背景播放器,用户只能点击图像播放或停止播放。我在创建或重新编写现有代码来为它制作播放列表时遇到问题,当上一首歌曲播放完毕时会自动播放下一首歌曲。我想用香草 js 来做。
这是我目前的情况:
https://jsfiddle.net/rockarou/ad8Lkkrj/
var imageTracker = 'playImage';
swapImage = function() {
var image = document.getElementById('swapImage');
if (imageTracker == 'playImage') {
image.src = 'http://findicons.com/files/icons/129/soft_scraps/256/button_pause_01.png';
imageTracker = 'stopImage';
} else {
image.src = 'http://findicons.com/files/icons/129/soft_scraps/256/button_play_01.png';
imageTracker = 'playImage';
}
};
var musicTracker = 'noMusic';
audioStatus = function() {
var music = document.getElementById('natureSounds');
if (musicTracker == 'noMusic') {
music.play();
musicTracker = 'playMusic';
} else {
music.pause();
musicTracker = 'noMusic';
}
};
这是触发下一首歌曲的技巧:
music.addEventListener('ended',function(){
//play next song
});
如何在同一音频标签上播放另一首歌曲:
music.pause();
music.src = "new url";
music.load();
music.play();
现在这里是 html5 中播放列表的一个很酷的示例,您可以同时加载每首歌曲,以防某些客户端(移动设备)在您消耗流量时不高兴,在下一个示例中音频同时加载,以实现从一首歌曲到另一首歌曲的平滑过渡,
加载歌曲:
//playing flag
var musicTracker = 'noMusic';
//playlist audios
var audios = [];
$(".song").each(function(){
var load = new Audio($(this).attr("url"));
load.load();
load.addEventListener('ended',function(){
forward();
});
audios.push(load);
});
//active track
var activeTrack = 0;
高亮歌曲正在播放,有点jquery,是的,是的,我很懒,很懒:
var showPlaying = function()
{
var src = audios[activeTrack].src;
$(".song").removeClass("playing");
$("div[url='" + src + "']").addClass("playing");
};
注意:如果声音未播放,请手动检查音频 url 是否可访问
[这里是非香草解决方案。]我的播放列表包含四首歌曲,它们分别命名为 0.mp3、1.mp3、2.mp3 和 3.mp3。
<html>
<head><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script></head>
<body>
<audio id="player" autoplay controls><source src="0.mp3" type="audio/mp3"></audio>
</body>
<script>
var x = 0;
var music = document.getElementById("player");
$("#player").bind("ended", function(){
x=x+1;
music.src = x%4 + ".mp3";
music.load();
music.play();
});
</script>
</html>
播放列表无限重复。
原版 Javascript 变体:
const audioArray = document.getElementsByClassName('songs'); //Get a list of all songs
let i = 0; //Initiate current Index
const player = document.getElementById('player'); //get the player
player.src = audioArray[i].getAttribute('data-url'); //set first Song to play
player.addEventListener('ended',function(){ //when a song finished playing
i++; //increase index
if (i < audioArray.length) { //If current index is smaller than count of songs
player.src = audioArray[i].getAttribute('data-url'); //set next song
return; // stop further processing of this function for now
}
// current index is greater than count of songs
i = 0; // therefore we reset the current index to the first available song
player.src = audioArray[i].getAttribute('data-url'); // and set it to be played
});
在此示例中,您没有为音频播放器设置初始 src source-tag,而是有一个 class 'song' 项目列表,其中包含 data-url 属性包含 url/path 到音轨。
我添加了评论以了解这段代码的作用和原因。
当然它可能会更好,但它是代码的快速抛出 ;)
我想创建一个音频背景播放器,用户只能点击图像播放或停止播放。我在创建或重新编写现有代码来为它制作播放列表时遇到问题,当上一首歌曲播放完毕时会自动播放下一首歌曲。我想用香草 js 来做。
这是我目前的情况:
https://jsfiddle.net/rockarou/ad8Lkkrj/
var imageTracker = 'playImage';
swapImage = function() {
var image = document.getElementById('swapImage');
if (imageTracker == 'playImage') {
image.src = 'http://findicons.com/files/icons/129/soft_scraps/256/button_pause_01.png';
imageTracker = 'stopImage';
} else {
image.src = 'http://findicons.com/files/icons/129/soft_scraps/256/button_play_01.png';
imageTracker = 'playImage';
}
};
var musicTracker = 'noMusic';
audioStatus = function() {
var music = document.getElementById('natureSounds');
if (musicTracker == 'noMusic') {
music.play();
musicTracker = 'playMusic';
} else {
music.pause();
musicTracker = 'noMusic';
}
};
这是触发下一首歌曲的技巧:
music.addEventListener('ended',function(){
//play next song
});
如何在同一音频标签上播放另一首歌曲:
music.pause();
music.src = "new url";
music.load();
music.play();
现在这里是 html5 中播放列表的一个很酷的示例,您可以同时加载每首歌曲,以防某些客户端(移动设备)在您消耗流量时不高兴,在下一个示例中音频同时加载,以实现从一首歌曲到另一首歌曲的平滑过渡, 加载歌曲:
//playing flag
var musicTracker = 'noMusic';
//playlist audios
var audios = [];
$(".song").each(function(){
var load = new Audio($(this).attr("url"));
load.load();
load.addEventListener('ended',function(){
forward();
});
audios.push(load);
});
//active track
var activeTrack = 0;
高亮歌曲正在播放,有点jquery,是的,是的,我很懒,很懒:
var showPlaying = function()
{
var src = audios[activeTrack].src;
$(".song").removeClass("playing");
$("div[url='" + src + "']").addClass("playing");
};
注意:如果声音未播放,请手动检查音频 url 是否可访问
[这里是非香草解决方案。]我的播放列表包含四首歌曲,它们分别命名为 0.mp3、1.mp3、2.mp3 和 3.mp3。
<html>
<head><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script></head>
<body>
<audio id="player" autoplay controls><source src="0.mp3" type="audio/mp3"></audio>
</body>
<script>
var x = 0;
var music = document.getElementById("player");
$("#player").bind("ended", function(){
x=x+1;
music.src = x%4 + ".mp3";
music.load();
music.play();
});
</script>
</html>
播放列表无限重复。
原版 Javascript 变体:
const audioArray = document.getElementsByClassName('songs'); //Get a list of all songs
let i = 0; //Initiate current Index
const player = document.getElementById('player'); //get the player
player.src = audioArray[i].getAttribute('data-url'); //set first Song to play
player.addEventListener('ended',function(){ //when a song finished playing
i++; //increase index
if (i < audioArray.length) { //If current index is smaller than count of songs
player.src = audioArray[i].getAttribute('data-url'); //set next song
return; // stop further processing of this function for now
}
// current index is greater than count of songs
i = 0; // therefore we reset the current index to the first available song
player.src = audioArray[i].getAttribute('data-url'); // and set it to be played
});
在此示例中,您没有为音频播放器设置初始 src source-tag,而是有一个 class 'song' 项目列表,其中包含 data-url 属性包含 url/path 到音轨。
我添加了评论以了解这段代码的作用和原因。 当然它可能会更好,但它是代码的快速抛出 ;)