自定义一个音频播放器

简单的做一个音频播放器,还是不错的,css样式没有写,自由发挥啦!

outerNode

  <div class="outerNode">
          <div class=innerNode>
              <div class=coverNode>
                       <div class="titleNode"></div>
                </div>  
          </div>
     </div>

后面的代码,放入到coverNode元素的后面

plangressNode

             <div class="plangressNode">
                   <div class="lineNode">
                        <div class="lineLeftNode"></div>
                        <div class="lineRightNode"></div>
                        <div class="lineCenterNode"></div>
                        <div class="trueLine"></div>
                        <div class="timeNode">
                               <div  class="nowNode"> </div>
                                <div class="allNode"></div>
                        </div>
                      </div>
                   </div>

bootom

               <div class="bottomNode">
                     <div class="speedNode">
                          <button class="oneSpeed">1x</button>
                          <button class="twoSpeed">2x</button>
                          <button class="halfSpeed">0.5x</button>
                       </div>
                   <div class="lasttNode"></div>
                   <div class="playNode"></div>
                   <div class="nextNode"></div>
                   <div class="volumeNode"></div>
            </div>

JS

  1. 获取对象

//timeNode 时间按钮
//nowNode 当前时间
//allNode 总时间
//speedNode 速率按钮
//oneSpeed 一倍数按钮
// twoSpeed 二倍数按钮
//halfSpeed .5倍数按钮
//bottomNode 功能区
//lastNode 上一曲按钮
// nextNode 下一曲按钮
//playNode 播放暂停按钮
//volumeNode 静音按钮
//trueLine 真正的进度条
// lineNode 进度条区
//lineLeftNode 进度条的左边
//lineRightNode 进度条的右边
//lineCenterNode 进度条的中间
//coverNode 封面图
// titleNode 音乐名字
//outerNode 最外层元素

创建Audio对象

var myAudio=new Audio();
var timeNode=document.querySelector(".timeNode"),
     nowNode=document.querySelector(".nowNode"),
     allNode=document.querySelector(".allNode"),
     speedNode=document.querySelector(". speedNode"),
     oneSpeed=document.querySelector(". oneSpeed"),
     twoSpeed=document.querySelector(". twoSpeed"),
     halfSpeed=document.querySelector(". halfSpeed"),
    bottomNode=document.querySelector(". bottomNode"),
    lastNode=document.querySelector(". lastNode"),
    nextNode=document.querySelector(". nextNode"),
   playNode=document.querySelector(". playNode"),
   volumeNode=document.querySelector(". volumeNode"),
  trueLine=document.querySelector(". trueLine"),
  lineNode=document.querySelector(". lineNode"),
  planpressNode=document.querySelector(". planLineNode"),
  lineLeftNode=document.querySelector(". lineLeftNode"),
  lineRightNode=document.querySelector(". lineRightNode"),
  lineCenterNode=document.querySelector(". lineCenterNode"),
 coverNode=document.querySelector(". coverNode"),
 titleNode=document.querySelector(". titleNode"),
 outerNode=document.querySelector(". outerNode"),

音乐的添加 使用数组 的json数据

var  allMusic=[
{
   "MusicSrc""="URL地址",
   "MusicPro"="URL地址",
   "MusicName"="自定义音乐名字"
 },
{
   "MusicSrc""="URL地址",
   "MusicPro"="URL地址",
   "MusicName"="自定义音乐名字"
},
{
   "MusicSrc""="URL地址",
   "MusicPro"="URL地址",
   "MusicName"="自定义音乐名字"
},
{
   "MusicSrc""="URL地址",
   "MusicPro"="URL地址",
   "MusicName"="自定义音乐名字"
},
],index=0

设置src

myAudio.src=allMusic[index].MusicSrc;

设置image

coverNode.style.backgroundImage="url("+allMusic[index].MusicPro+")";

显示总时间,和时间动起来

myAudio.addEventListener("canplay",function(){
      var needTime=parseInt(myAudio.duration);//获取总时间
      var s=needTime%60;//秒钟
      var m=parseInt(needTime/60);分钟
      var timeNum=toDou(m)+":"+toDou(s);
     allNode.innerHTML=timeNum;
},false);
function toDou(time){
    return time<10?"0"+time:time;
}
myAudio.addEventListener("timeupdate",function(){
      var needTime=parseInt(myAudio.currentTime);//获取总时间
      var s=needTime%60;//秒钟
      var m=parseInt(needTime/60);分钟
      var timeNum=toDou(m)+":"+toDou(s);
     nowNode.innerHTML=timeNum;
},false);

计算进度条的长度 监听时间数据事件

plangressNode.addEventListener("timeupdate",function(){
           tureLine.style.width=myAudio.currentTime/myAudio.duration*100+"%";
},false)

点击进度条外层元素,会达到指定的位置

plangressNode.onclick=function(e){
   var  ev=e||event;
   myAudio.currentTime=myAudio.duration*(ev.clientX-(this.offsetLeft+outNode.offsetLeft))/this.offsetWidth);
   tureLine.style.width=myAudio.duration*(ev.clientX-(this.offsetLeft+outNode.offsetLeft))/this.offsetWidth)*100+"%";
}

点击下一曲

nextNode.onclick=function(){
    index++;
    if(index==allMusic.length){
     index=0;
    }
   musicAll()
}

点击上一曲

  lastNode.onclick=function(){
       index--;
      if(index==-1){
          index=allMusic.length-1;
      }
     musicAll()
 }

封装一个下一曲上一曲的函数

function  musicAll(){  
    myAudio.currentTime=0;//清空当前播放的时间
    trueLine.style.width=0%;//清空下一曲的长度

    myAudio.src=allMusic[index].MusicSrc;//获取下一曲的歌
   if(playBln==false){
        myAudio.play();
    }else{
        myAudio.pause();
    }

coverNode这个是封面元素

    coverNode.style.backgroundImage="url("+allMusic[index].MusicPro+")";//获取下一首的图片
 }

放音乐播放完时,自动下一曲,首先我们要使用一个事件,就是timeupdate当时间改变是触发,然后监听事件

 nextNode.addEventListener("timeupdate",function(){
     var needCurrent=parseInt(myAudio.currentTime);
     var needDuration=parseInt(myAudio.duration);
     if(needCurrent==needDuration){
           index++;
           if(index==allMusic.length){
               index=0;
           }
           musicAll()
     }

})

播放速率

 oneSpeed.onclick=function(){
   myAudio.playbackRate=1;
}
twoSpeed.onclick=function(){
   myAudio.playbackRate=2;
}
halfSpeed.onclick=function(){
    myAudio.playbackRate=0.5;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值