播放器里有3种播放形式,单曲循环,随机播放,按顺序播放。随机播放和顺序播放已经实现,接下来就是单曲循环。我来说说我的思路。
单用户点击单曲循环列表的时候,获取当前正在播放的音乐数据,并记录该音乐数据。启用计时器比较当前音乐播放时间进度和音乐总的时间,如果播放到总时间的最后12秒,就继续播放刚刚标记的音乐数据。如果用户点击上一条或下一条按钮,就更换记录。
具体代码:
var play_repeat=null;//需要单曲循环的音乐
点击循环播放按钮
$(document).on('click', '.jp-repeat', function(e){
//点击播放按钮,先把随机播放的按钮给变成灰色
$('.jp-shuffle-off').hide();
$('.jp-shuffle').show();
getNowPlayMusic();
})
//获取播放列表里正在播放的音乐数据,也就是当前需要循环的音乐数据
function getNowPlayMusic(){
var audio=$('#jplayer_N').find('audio')[0];
var src=$(audio).attr('src');
if(src==undefined)return;
for(var i=0;i<myPlaylist.playlist.length;i++){
var mm=myPlaylist.playlist[i];
if(src.indexOf(mm.mp3)>-1){
play_repeat=mm;
}
}
}
//计时器循环音乐播放进度
setInterval(function(){
//myPlaylist.playlist是音乐播放列表
if(myPlaylist.playlist!=undefined) {
//$('.jp-repeat').is(':hidden')表示用户开启的单曲循环按钮
if($('.jp-repeat').is(':hidden')&&play_repeat!=null){
//audio现在正在播放的音乐
var audio=$('#jplayer_N').find('audio')[0];
var src=$(audio).attr('src');
if(src!=undefined&&play_repeat!=null){
//如果当前播放的音乐和以前存储的音乐数据不一样,就替换掉,出现这种情况,是因为用户先点击了单曲循环按钮,
然后又点击上一条,下一条播放按钮,这时候用户的单曲循环数据就得跟着变化
if(src.indexOf(play_repeat.mp3)==-1){
for(var i=0;i<myPlaylist.playlist.length;i++){
var mm=myPlaylist.playlist[i];
if(src.indexOf(mm.mp3)>-1){
play_repeat=mm;break;
}
}
}
//监听播放时间,如果音乐快播完了,就设置成当前需要单曲循环的音乐数据
if(audio.currentTime+6>audio.duration){
$('#jplayer_N').jPlayer("setMedia",play_repeat );
myPlaylist.play();
}
}
}
}
}, 3000) ;
如有有疑问可以联系扣1913284695探讨