编程论坛's Archiver

编程之星 发表于 2007-8-30 15:08

[原创]菜鸟应用JAVASCRIPT 之 简易网页音乐播放程序

*/ --------------------------------------------------------------------------------------<br>*/ 出自: 编程中国  http://www.bc-cn.net<br>*/ 作者: 编程之星★    E-mail:rostar@126.com    QQ:150163704<br>*/ 时间: 2007-8-30  编程论坛首发<br>*/ 声明: 尊重作者劳动,转载请保留本段文字<br>*/ --------------------------------------------------------------------------------------<br><br><br>
<P align=left>                            <STRONG>菜鸟应用JAVASCRIPT 之 简易网页音乐播放程序</STRONG><br>                                                   —— 编程之星<br>                                                       2007-8-30 <br>大家好,已经有一段时间没有在论坛发贴了.以前我在论坛发表一张贴—《菜鸟应用JAVASCRIPT 之 简单图片浏览》.虽然没有人给我回贴,但人气还算是不错的,而且还让管理员给加精了,在此要向管理员表示谢意.<br>那么今天我们来学习一下网页音乐播放程序的原理,这应该是大家,特别是初学者比较感兴趣的话题.我写的这个程序功能并不全面,而且界面也不美观,但这张贴旨在讨论一下其中的原理,所以就请大家将就一下啦.大家还可以在此基础上写出一个功能全面的网页播放程序出来.这个程序运行的前提是—电脑上安装了Windows Media Player.<br>要想实现网页音乐播放的效果,就应该对插件(Windows Media Player或Real Player)的属性和方法有一些了解.这里,我们只讨论一些本程序涉及到的Windows Media Player插件的一些属性和方法.<br><br>                                   <STRONG>Windows Media Player的属性</STRONG><br><br>                        属性名             属性值              作用       <br>                         URL             歌曲的地址        设置或返回播放插件播放的歌曲文件地址       <br>                        uiMode          None或Mini或Full  设置播放插件是否显示控制条等       <br>                     enableContextMenu   True或False      设置播放插件是否显示右键菜单       <br>                       controls                           播放插件的一个集合属性,用来控制播放等     <br><br>                             <STRONG>Windows Media Player属性controls集合的方法<br></STRONG><br>                                          方法名    作用       <br>                                         play()    播放歌曲       <br>                                         pause()    暂停歌曲       <br>                                         stop()    停止歌曲     <br></P>
<P>程序测试连接:</P>
<P>       <a href="http://rostar.xinwen520.net/简易网页音乐播放程序.html" target="_blank" >http://rostar.xinwen520.net/简易网页音乐播放程序.html</A><br><br>  把程序的完整源代码给大家.然后大家只要看代码中的注释应该就能理解的啦.如果还不理解的话,那么就看我的解释,文字可能欠准确和流畅,请包涵.<br></P>
<DIV class=htmlcode>
<P>&lt;html&gt;<br>&lt;head&gt;<br><FONT color=#0909f7>&lt;script&gt;<br>//打开就播放<br>function loadPlay()<br>{<br>  try{<br>    setColor(0); <br>    document.WMP.URL=MusicList.options[0].value; //指定(播放)列表中的第一首歌曲<br>    document.WMP.controls.play(); //播放<br>  }catch(e){}</FONT></P>
<P><FONT color=#0909f7>  //try{}catch(e){}表示忽略程序运行中出现的错误<br>}</FONT></P>
<P><FONT color=#0909f7>//以下函数获取当前播放歌曲在列表中的索引<br>function getMusicIndex()<br>{<br>  try{<br>    var MusicIndex=0; //存储当前播放歌曲的位置<br>    /*<br>     遍历整个播放列表.<br>     获取当前播放歌曲在列表中的下标位置<br>     用document.WMP.URL来和列表项的值比较<br>    */<br>    for(i=0;i&lt;MusicList.length;i++)<br>    {<br>      if(document.WMP.URL==document.all.MusicList.options[i].value)<br>      {      <br>        MusicIndex=i; //记录下当前播放歌曲的位置<br>        break;<br>      }    <br>    }<br>    return MusicIndex; //整个函数返回当前播放歌曲的下标位置<br>  }catch(e){}<br>  setTimeout('getMusicIndex()',1000); //每隔1秒就检测一下当前播放歌曲的位置<br>}<br>getMusicIndex(); //调用getMusicIndex()函数</FONT></P>
<P><FONT color=#0909f7>//设置当前播放与不播放的歌曲的颜色<br>function setColor(me)<br>{<br>  for(i=0;i&lt;MusicList.length;i++)<br>  {<br>    MusicList.options[i].style.color="purple";<br>    if(i==me)<br>    {      <br>      MusicList.options[i].style.color="green";  <br>      continue;<br>    }    <br>  }<br>}<br>//播放上一曲<br>function playPrevious()<br>{<br>   try{<br>    var PlayIndex=getMusicIndex(); //将当前播放歌曲的位置存储到PlayIndex变量中<br>    PlayIndex--; //当前播放歌曲的位置-1就表示起上一曲的位置<br>    setColor(PlayIndex);<br>    document.WMP.URL=MusicList.options[PlayIndex].value;<br>    document.WMP.controls.play();    <br>  }catch(e){}<br>}<br>//播放下一曲<br>function playNext()<br>{<br>   try{<br>    var PlayIndex=getMusicIndex(); //将当前播放歌曲的位置存储到PlayIndex变量中<br>    PlayIndex++; //当前播放歌曲的位置+1就表示起下一曲的位置<br>    setColor(PlayIndex);<br>    document.WMP.URL=MusicList.options[PlayIndex].value;<br>    document.WMP.controls.play();    <br>  }catch(e){}<br>}<br>//控制播放,暂停,停止<br>function control(me)<br>{<br>  switch (me)<br>  {<br>    case 1 :  //暂停<br>      document.WMP.controls.pause();<br>      break;<br>    case 2 : //播放<br>      document.WMP.controls.play();<br>      break;    <br>    case 0 : //停止<br>      document.WMP.controls.stop();<br>      break;    <br>  }<br>}<br>&lt;/script&gt;</FONT><br>&lt;/head&gt;<br>&lt;body onload="loadPlay()"&gt;<br><FONT color=#3e8f6e>&lt;object id="WMP" classid="clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6" width="232" height="200" loop=-1&gt; <br>&lt;param name="URL"&gt;<br>&lt;param name="uiMode" value="none"&gt;&lt;!-- none,mini,full --&gt;<br>&lt;param name="enableContextMenu" value="false"&gt;<br>&lt;/object&gt;<br></FONT>&lt;br&gt;<br>&lt;button onclick="control(2)"&gt;播放&lt;/button&gt;<br>&lt;button onclick="control(1)"&gt;暂停&lt;/button&gt;<br>&lt;button onclick="control(0)"&gt;停止&lt;/button&gt;<br>&lt;button onclick="playPrevious()"&gt;上一曲&lt;/button&gt;<br>&lt;button onclick="playNext()"&gt;下一曲&lt;/button&gt;<br>&lt;br&gt;<br>&lt;select id="MusicList" multiple&gt;<br>&lt;option value="http://down.5458.net/yenja/zy/jwys.mp3"&gt;水木年华--借我一生<br>&lt;option value="http://media3.91vc.com/vc0912/space/2007/05/16/cyzhuiyue/1560247_20070517004036.mp3"&gt;水木年华--少年往事<br>&lt;option value="http://www.m8cool.com/UserFiles/BbsAttachments/2007072219356718750-29B4.mp3"&gt;水木年华--别哭,我最爱的人<br>&lt;/select&gt;<br>&lt;p&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br></P></DIV>
<P><br><br><br><FONT color=#625885><STRONG><FONT color=#f73809>程序代码详细分析:</FONT></STRONG><br></FONT><br>  本程序中共有6个函数.接下来我试着向大家一个个的分析这些函数.<br>1.<FONT color=#aa0000>loadPlay()函数分析</FONT>:<br>我们先看看第1个函数loadPlay(),这个函数表示,一打开网页就播放插件就播放列表中的第一首歌曲.我们可以可以看到函数内部有这样的语句try{}catch(e){},这语句是Javascript中捕获错误的语句,这里用这个语句的原因是,如果函数内部用错误,那么就忽略其运行错误.我们再来看这一句setColor(0);这表示调用另外一个函数,后面我们会详解这个函数.再看看document.WMP.URL=MusicList.options[0].value;这个语句表示将列表中的第1项的值赋予给播放插件的URL属性用作播放插件的播放文件地址,因为列表中各项的值都是一些歌曲的文件地址.接着,我们看到document.WMP.controls.play();这语句进行播放操作,因为在上一个语句中我们已经给播放插件指定播放文件的地址了,所以我们就要用到播放插件的集合属性controls的play()方法来进行播放歌曲.<br>2. <FONT color=#aa0000>getMusicIndex()函数分析</FONT>:<br>  这个函数表示, 获取当前播放歌曲在列表中的索引.本程序获取播放歌曲索引的目的就是用来进行播放上一曲和下一曲的操作.我们首先声音一个变量MusicIndex,这个变量属于局部变量,用来存储当前播放歌曲的位置(列表中的项目下标索引).当然我们可以声音一个全局变量来存储,但如果能用局部变量解决问题的话,尽量不要使用全局变量,这是一个好的建议(我在某些地方看到的,嘿嘿).为了取得当前播放歌曲在列表中的下标位置,我们需要遍历整个播放列表,然后用播放插件的URL属性和列表中各项的值(value属性值)作比较,如果两个一致的话,那么就提取出该项在播放列表中的下标位置,这样我们就要用到for(i=0;i&lt;MusicList.length;i++){…}循环来遍历啦,在这个for循环的内部,我们用了if语句来判断是否符合要求,如果符合了就将当前播放歌曲的位置存储到MusicIndex变量中,然后就退出for循环.接下来,我们可以看到return MusicIndex;这个语句表明getMusicIndex()函数返回一个值,这个值就是MusicIndex局部变量的值.<br>3. <FONT color=#aa0000>setColor(me)函数分析</FONT>:<br>  这个函数表示,设置当前播放与不播放的歌曲的颜色,这样就能够很清楚的知道正在播放那一首歌曲啦.这函数有一个参数me,这个参数是跟当前播放歌曲的下标有关的.我们首先用一个for循环来遍历整个播放列表,在for循环的内部可以看到这样的一个语句: MusicList.options[i].style.color="purple";,这表示将列表中的各项的文字颜色设置成紫色.接下来就用一个if语句块啦,我们开看看if块中的条件语句i==me,这表示,如果某个列表中的项的下标位置和函数的参数me一致的话,那么就将该项的文本颜色设置成绿色(执行MusicList.options[i].style.color="green";)并且开始进入下半轮的循环(执行continue;并不是重新开始循环!)continue语句就在循环中的作用就好像你在路上走路时遇到的一个石头,当遇到这个石头的时候,你就跨过它,继续往下走 (这是我个人的愚蠢的理解,专供像我们这些IQ的人用来记忆理解的,大家也可以不用这么理解,嘿嘿).<br>4. <FONT color=#aa0000>playPrevious()函数分析</FONT>:<br>  这个函数表示,用来播放上一首歌曲.我们先看var PlayIndex=getMusicIndex();这表示将getMusicIndex()函数的返回值(当前播放的歌曲的位置)赋值给PlayIndex变量.再看看PlayIndex--;这语句表示PlayIndex的变量值减去1,这样一来, PlayIndex的值就是当前播放歌曲的上一首歌曲的下标位置了,接下来再看, setColor(PlayIndex);这表示调用setColor(me)函数来设置指定项的文本颜色,不要忘了PlayIndex作为setColor(me)函数的实际参数.下面两句不用再解释了吧,如果还不十分理解的话,请参考前面的解释.<br>5. <FONT color=#aa0000>playNext()函数分析</FONT>:<br>  请参考playPrevious()函数分析,两者的主要也是唯一的差别就是加减号的使用.<br>6. <FONT color=#aa0000>control(me)</FONT>函数分析:<br>  这个函数表示,用来进行播放插件的控制操作,如播放,暂停,停止.我们可以看到该函数内部只有switch结构块, switch结构块的条件表达式是采用该函数的形式参数me.接下来,我们来看case 1 ,这表示,如果如果me和1匹配的话,那么就暂停播放(执行document.WMP.controls.pause();语句),break;表示退出switch结构块.依此类推,下面的不用解释了吧!<br>  我们在来看看HTML代码中的一句:<br>&lt;object id="WMP" classid="clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6" width="232" height="200" loop=-1&gt;,大家注意&lt;object&gt;标记的classid属性值了! clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6表示在网页中加载Windows Media Player插件,这是至关重要的!   <br><br></P>
<P>好啦,解释完毕啦,大家可以放松心情啦,改天记得要写一个很棒的播放程序出来哦.<br><br><br>下面供大家下载来看看.<br><br></P>[attach]26794[/attach]<br>
[align=right][color=#000066][此贴子已经被作者于2007-9-2 22:59:42编辑过][/color][/align]

VB爱上我 发表于 2007-8-31 12:02

楼主的播放器写得不错!<BR>1、能够添加、修改、删除歌曲<BR>2、能够设置单曲、多曲、随机播放<BR>3、能够显示歌词,复杂点歌词能同步<BR><BR>期待……

编程之星 发表于 2007-8-31 15:00

<P>  实质上我已经写了一个2楼所说的那样的播放程序,但由于代码比较庞大,起码也有1000多行以上,而且还有一点点的BUG,所以就不敢拿来献丑了,请谅解.<BR>  我写这文章的目的就是要大家都学习一下网页播放器的原理,That's all,thank you.</P>

yeling236 发表于 2007-9-9 10:32

好东西...

huangyong 发表于 2007-9-9 10:59

好东西,收藏,谢谢。

编程之星 发表于 2007-9-9 17:47

大家的肯定就是对我最大的支持,谢谢

cxjyw 发表于 2007-12-4 10:02

好东西

好东西,支持

jhtyolg20002 发表于 2007-12-4 17:52

这里真好!安逸!

qlx_123 发表于 2007-12-6 20:07

支持!

zslj 发表于 2008-5-3 05:00

看了,不错!

whpj 发表于 2008-5-18 20:36

学习了

wangwei155 发表于 2008-6-3 12:41

谢咯

3ks

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.