• 前端播放器js实现播放列表上一曲下一曲删除节目功能


    关于前端播放器上一曲,下一曲,播放列表的增删改查等等的功能,今天给大家详细解说下逻辑实现

    1. 添加到列表
      思路:用数组,将节目名称添加到数组中,通过判断数组来实现,上代码
      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');  //在播放列表中添加样式给当前节目
      
        }
    2. 上一曲,下一曲 
      思路:判断当前节目的下标 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');
        };
      

        

    3. 播放器左右按钮的显示隐藏

      思路:也是根据 当前节目下标playListIndex 和节目总长度_itemLength 来判断  如果当前节目下标为0就是第一曲,上一曲箭头隐藏,下一曲箭头显示
      如果当前节目下标等于节目列表总数量-1也就是最后一曲,下一曲箭头隐藏,上一曲箭头显示
      如过当前节目下标都不满足上述的两个条件,就是在列表中间,此时上一曲和下一曲箭头都显示

    4. 删除列表中的某一节目
      思路:判断数组中是否有这个节目,获取到下标后删除
      重点:数组的indexOf方法从前往后会返回一个下标 两个参数 1:要查找的项,2:开始查找的位置,一般为0
      数组的splice方法删除某个数组中的值 两个参数 1:要查找项在数组中的下标,2:从参数1指定的位置开始删除几项  1 就是删除一个
      // 点击删除节目
          $(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;
          })
      

        

  • 相关阅读:
    LeetCode 226. Invert Binary Tree
    LeetCode 221. Maximal Square
    LeetCode 217. Contains Duplicate
    LeetCode 206. Reverse Linked List
    LeetCode 213. House Robber II
    LeetCode 198. House Robber
    LeetCode 188. Best Time to Buy and Sell Stock IV (stock problem)
    LeetCode 171. Excel Sheet Column Number
    LeetCode 169. Majority Element
    运维工程师常见面试题
  • 原文地址:https://www.cnblogs.com/webXiaoAYang/p/10945482.html
Copyright © 2020-2023  润新知