关于前端播放器上一曲,下一曲,播放列表的增删改查等等的功能,今天给大家详细解说下逻辑实现
var idList = [] , //节目数组 先var一个空数组
playListIndex = 0; //播放列表当前节目的下标 再定义一个变量来存放下标
function FnAddList(list_data){ //list_data是一个对象,里边存放着节目名称,播放时长等等的东西
var _id = list_data.title, //节目名称
_isAdd = true, //判断条件
_index = 0; //下标
for(var i=0; i<idList.length; i++){ //遍历数组中的值
if(_id == idList[i]){ //判断数组中是否有这个标题
_isAdd = false;
_index = i; //标题在数组中的位置下标
}
}
if(_isAdd){
idList.unshift(list_data.title);
var _playListHtml = ‘<li class="playList-list-item" data-title="‘+list_data.title+‘" data-type="‘+list_data.type+‘" data-date="‘+list_data.date+‘" data-time="‘+list_data.time+‘" data-auther="China Plus Radio" data-url="‘+list_data.url+‘"><div class="playList-list-showsName">‘+list_data.title+‘</div><div class="playList-list-autherName">‘+list_data.autherName+‘</div><div class="playList-list-time">‘+list_data.time+‘</div><div class="playList-list-btns"><span class="playList-list-btns-remove" data-title="‘+list_data.title+‘" title="删除"></span></div></li>‘;
$(‘#playList-list ul‘).prepend(_playListHtml); //添加到页面中
}
playListIndex = _index;
var _playListLength = $(‘#playList-list ul .playList-list-item‘).length-1;
// 当调用 FnAddList 时给列表节目添加 active
$(‘#playList-list ul .playList-list-item‘).eq(_index).addClass(‘active‘).siblings().removeClass(‘active‘); //在播放列表中添加样式给当前节目
}
上一曲,下一曲
思路:判断当前节目的下标 playListIndex 默认为0,上一曲就-1 下一曲就+1
var _item , _itemLength; //节目节点和节目总数 全局变量
function changeMedia(i){
_item = $(‘#playList-list ul .playList-list-item‘) , _itemLength = _item.length-1;
playListIndex+=i;
if(playListIndex<0){
playListIndex = 0;
}else if(playListIndex>_itemLength){
playListIndex = _itemLength;
}else{
var _this = _item.eq(playListIndex);
FnAudioPlay(_this,true);
}
$(‘.playList-list-live‘).removeClass(‘active‘);
};
// 点击删除节目
$(document).on(‘click‘,‘.playList-list-btns-remove‘,function(){
var _this = $(this), //当前节点
_this_title = _this.attr(‘data-title‘), //当前节目的标题
_arrIndex; //要删除节目的下标
isRemoveBtnsClick = true; //判断是删除事件
if(idList.indexOf(_this_title,0) != -1){
_arrIndex = idList.indexOf(_this_title,0);
idList.splice(_arrIndex,1);
_this.parent().parent().remove(); //删除点击的节目
_item = $(‘#playList-list ul .playList-list-item‘);
_itemLength = _item.length; //删除一次节目重新记录一下列表节目的长度 节目列表总数量
_nextItemIndex = _arrIndex;
if(_this.parent().parent().hasClass(‘active‘)){
playListIndex = _arrIndex; //将要删除项的下标赋值给playListIndex ,此变量为全局变量,会用在上一曲下一曲方法中
if(_nextItemIndex<0){ //判断点击节目下标小于0默认下标为0,播放第一条
_nextItemIndex = 0;
}else if(_nextItemIndex>_itemLength){ //判断点击节目下标大于节目列表总数量就等于总数量,播放最后一条
_nextItemIndex = _itemLength - 1;
}else{ //判断点击节目下标大于0且小于总长度
if(_nextItemIndex <= _itemLength - 1){ //判断点击节目下标大于0且小于或等于总长度,就播放下一个
var _this = _item.eq(_nextItemIndex);
FnAudioPlay(_this,true);
}else{ //如果删除列表中最后一条正在播放的节目就播放列表中的第一条 判断点击节目下标为最后一条,就播放第一曲
FnAudioPlay(_item.eq(0),true);
}
}
}
if(_itemLength <= 0){ //当列表空的时候初始化播放器播放直播内容
// 播放器初始化
FnAudioInit();
}
}
return false;
})
原文:https://www.cnblogs.com/webXiaoAYang/p/10945482.html