音频播放器

HTML+JS的音频播放器

Web 上的音频直到现在,仍然不存在一项旨在网页上播放音频的标准。今天,大多数音频是通过插件(比如 Flash)来播放的。然而,并非所有浏览器都拥有同样的插件。HTML5 规定了一种通过 audio 元素来包含音频的标准方法。audio 元素能够播放声音文件或者音频流。

<audio src="song.mp3" controls="controls">

</audio>

试着用audio windows media 编写一个多浏览器支持的音频播放器:

Html

 

<!DOCTYPE HTML>

<html>

 

<head>

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  <title>WavPlayer</title>

  <meta name="Author" content="">

  <meta name="Keywords" content="">

  <link href="public.css" rel="stylesheet" type="text/css" />

  <script language="javascript" type="text/javascript" src="jquery.js"></script>

  <script language="javascript" type="text/javascript" src="WAVplayer_html5.js"></script>

</head>

<body>

 

 

<style>

    .WavPlayer{width:391px;height:66px;background:url(pbg.jpg) 0 0 no-repeat;display:none;}

    .WavPlayer .PlayerBtn{width:67px;height:45px;display:inline;float:left;margin:10px 0 0 10px;}

    .WavPlayer .PlayerBtn span{display:block;cursor:pointer;width:67px;height:45px;background:url(play.jpg) 0 0 no-repeat;}

    .WavPlayer .PlayerBtn span.on{background:url(pause.jpg) 0 0 no-repeat;}

    .WavPlayer .bar{width:178px;height:9px;display:inline;float:left;padding:3px 0px 1px 0px;background:url(bar.jpg) 0 0 no-repeat;margin:26px 0 0 6px;position:relative;cursor:pointer;}

   

    .WavPlayer .leftBar{height:9px;width:4px;display:inline;float:left;}

    .WavPlayer .onPlay .leftBar{background:url(l.gif) top right no-repeat;}

 

    .WavPlayer .rightBar{height:9px;width:3px;display:inline;float:left;}

    .WavPlayer .onPlay .rightBar{background:url(r.gif) 0 0 no-repeat;}

   

    .WavPlayer .playBar{height:9px;width:0;display:inline;float:left;background:url(m.gif) 0 0 repeat-x;}

 

    .WavPlayer .playTime{display:inline;float:left;margin:24px 0 0 8px;font-size:13px;width:38px;overflow:hidden;}

 

    .WavPlayer .downLoad{width:66px;height:47px;display:inline;float:left;background:url(down.jpg) 0 0 no-repeat;margin:9px 0 0 6px;}

 

    .loadPlayer{display:block;margin:20px auto 0;}

 

</style>

 

<div id="WavPlayer" style="width:391px;height:66px;"></div>

 

 

<div id="loadStatus" ></div>

<script>

theWavPlayer({id:'WavPlayer',url:'11.mp3'});

</script>

 

</body>

</html>

 

WAVplayer_html5.js

 

function WavPlayer(obj){

   

    var node = this;

    node.id = obj.id;

    node.url = obj.url;

    node.downLoad = obj.downLoad || false; //下载按钮绑定方法

    node.box = $('#'+obj.id);

    node.html = '<img src="012.gif" class="loadPlayer" id="'+node.id+'_loading"/><div class="WavPlayer" id="'+node.id+'_Player"><div class="PlayerBtn"><span></span></div><div class="bar"><div class="leftBar"></div><div class="playBar"></div><div class="rightBar"></div></div><div class="playTime">00:00</div>    <a class="downLoad" id="'+node.id+'_downLoad" href="javascript:;" ></a></div>';//播放器HTML结构

    node.playType = !!(document.createElement('audio').canPlayType); //判断是否支持 audio

   

}

 

WavPlayer.prototype={

       

        play:function(){

            var node = this;

            node.box.html(node.html);

            node.loading = $('#'+node.id+'_loading');

            node.player = $('#'+node.id+'_Player');

            node.btn = node.player.find('.PlayerBtn span');

            node.playTime = node.player.find('.playTime');

            node.bar = node.player.find('.bar');

            node.playBar = node.bar.find('.playBar');

            node.leftBar = node.bar.find('.leftBar');

            node.rightBar = node.bar.find('.rightBar');

            node.type = true ;

           

            if (node.downLoad)

            {  

                $('#'+node.id+'_downLoad').click(function(){node.downLoad();});

            }

       

            if(!node.playType){ //不支持audio则用windows  Media

 

                var MediaHtml = '<div style="visibility:hidden;"><object ';

 

                if($.browser.msie){

                    MediaHtml +=' classid="clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6" ';

                }

                else{

                    MediaHtml +=' type="application/x-ms-wmp" ';

                }

               

                MediaHtml +=' id="'+node.id+'_Media" ><param name="URL" value="'+node.url+'" /><param name="rate" value="1" /><param name="balance" value="0" /><param name="currentPosition" value="0" /><param name="playCount" value="1" /><param name="autoStart" value="0" /><param name="currentMarker" value="0" /><param name="invokeURLs" value="-1" /><param name="volume" value="50" /><param name="mute" value="0" /><param name="stretchToFit" value="0" /><param name="windowlessVideo" value="0" /><param name="enabled" value="-1" /><param name="enableContextMenu" value="-1" /><param name="fullScreen" value="0" /> <param name="enableErrorDialogs" value="-1" /></object></div>';

 

                node.MediaBox=$(MediaHtml).insertAfter(node.box);

 

               

                node.Media = document.getElementById(node.id+'_Media');

 

                node.timer = setInterval(function(){node.IEplayerSet();},200);

 

                if($.browser.opera){

                   

                    node.loading.hide();

                    node.MediaBox.css('visibility','visible');

 

                }

               

       

           

            }

            else{

               

                node.hide = $('<div style="display:none;"></div>').insertAfter(node.box);

                node.MediaPlay = $('<audio src="'+node.url+'" controls="controls"></audio>').appendTo(node.hide);

                node.Media = node.MediaPlay[0];

 

           

                node.MediaPlay.bind("canplaythrough", function(){

                   

                    if(node.type){

                        node.loading.hide();

                        node.player.show();

                        node.playerSet();

                        node.type = false;

                    }

               

                });

             

            }          

 

        },

        IEplayerSet:function(){

            var node = this;

 

             

            switch(node.Media.playState)

            {   

                case 10:

                {

                 

                  if(node.type){

                     node.loading.hide();

                     node.MediaBox.css('visibility','hidden');

                     node.btn.click(function(){

                        node.playerBtn(this);   

 

                     });

                  

                     node.player.show();

                 

                     node.barWidth = node.bar.width()-node.leftBar.width()-node.rightBar.width();

                  

               

                      node.bar.click(function(e){

                           

                        if(node.Media.playState == 3) {

                           

                            var offset = node.bar.offset(),

                                 mX = e.clientX,

                                 nowWidth = e.clientX - offset.left - node.leftBar.width();

                            nowWidth = nowWidth<0?0 : nowWidth>node.barWidth?node.barWidth :  nowWidth;

                            var nowTime = node.duration * nowWidth / node.barWidth;

                            node.playBar.width(nowWidth);

                            node.Media.controls.currentPosition = nowTime;

                       

                        }

 

                    });

 

                    node.type = false;

                  }

 

                }

                break;

                case 3:

                {  

                   node.playTime.html(node.Media.controls.currentPositionString);

                   node.NowTime = node.Media.controls.currentPosition;

                   node.duration = node.Media.currentMedia.duration;

                   node.playbar();

 

                }

                break;

                case 1:

                {  

                  node.playTime.html('00:00');

                  node.btn.attr('class','');

                  node.bar.attr('class','bar');

                  node.playBar.width('0');

                }

                break;

                default:

                {

                 

                }

            }

 

           

        },

        playerSet:function(){

            var node = this;

 

            node.duration = node.Media.duration;

            node.barWidth = node.bar.width()-node.leftBar.width()-node.rightBar.width();       

   

            node.btn.click(function(){

                node.playerBtn(this);  

 

            });

           

            node.MediaPlay.bind("ended", function(){

                node.Media.currentTime = 0;

                node.btn.attr('class','');

                node.Media.pause();

                ;

            });

 

            node.MediaPlay.bind("timeupdate", function(){

               

                node.NowTime = node.Media.currentTime;

                node.playTime.html(node.timeChange(node.NowTime));

                node.playbar();

            });

 

            node.bar.click(function(e){

           

           

                if(!node.Media.paused) {

                   

                    node.setBar(e);

                }

 

            });

       

       

        },

        playerBtn:function(tag){

            var node = this,tagNode = $(tag);

               

            if (tagNode.attr('class') == 'on'){

                tagNode.attr('class','');

                if(!node.playType){

                    node.Media.controls.pause();

                }

                else{

                    node.Media.pause();

                }

               

            }

            else{

                tagNode.attr('class','on');

                if(!node.playType){

                    node.Media.controls.play();

                }

                else{

                    node.Media.play();

                }

               

            }

       

        },

        timeChange:function(n){

           

            var num = Math.round(n),

                t1 = Math.floor(num/60),

                t2 = num%60,

                timer = t1 < 10 ? '0'+ t1 : t1;

            timer += ":";

            timer += t2 < 10 ? '0'+ t2 : t2;

       

           

            return timer;

 

        },

        playbar:function(){

            var node = this;

               

            if (node.NowTime == 0)

            {

                node.bar.attr('class','bar');

                node.playBar.width('0');

            }

            else{

                var nowWidth = node.barWidth * node.NowTime / node.duration;

                node.bar.attr('class','bar onPlay');

                node.playBar.width(nowWidth);

            }

   

        },

        setBar:function(e){

 

            var node=this,

                offset = node.bar.offset(),

                mX = e.clientX,

                nowWidth = e.clientX - offset.left - node.leftBar.width();

            nowWidth = nowWidth<0?0 : nowWidth>node.barWidth?node.barWidth :  nowWidth;

            var nowTime = node.duration * nowWidth / node.barWidth;

           

            if(!node.playType){

                node.playBar.width(nowWidth);

                node.Media.controls.currentPosition = nowTime;

            }

            else{

                node.Media.currentTime = nowTime;

            }

           

 

           

       

        }

 

};

 

function theWavPlayer(obj){

 

    if ( obj.id != undefined && obj.url != undefined )

    {

        var newWavPlayer = new WavPlayer(obj);

        newWavPlayer.play();

    }

 

   

}


 
最后测试 IE7+,Firefox,Chrome可以正常播放MP3文件。

 

posted @ 2013-06-28 19:28  爱生活,爱编程  阅读(388)  评论(0编辑  收藏  举报