[关闭]
@greenfavo 2015-11-28T19:08:25.000000Z 字数 3503 阅读 638

html5音乐播放器-audio应用实例

html5


功能介绍

上篇文章介绍了audio的API,这篇文章我以一个具体的例子深入探讨一下这些API的使用。例子就是我博客左下角的那个音乐播放器,模仿了微博上虾米音乐的控件样式。主要的功能就如大家看到的一样:音乐上一首下一首切换,列表循环,音量增减,显示播放进度。

布局

这个自定义的控件上的图标都是bootstrap的字体图标,所以要先引入bootstrap。当然你也可以用font Awesome的图标,改一下类名就好了,font Awesome上的图标更多。

  1. <div class="music">
  2. <img src="images/poster.jpg" class="poster"/>
  3. <div class="control">
  4. <p class="music-title">明明就-周杰伦</p>
  5. <div class="progress">
  6. <div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">
  7. </div>
  8. </div>
  9. <span class="time">4.25</span>
  10. <span class="glyphicon glyphicon-step-backward" id="backward"></span>
  11. <span class="glyphicon glyphicon-play" id="play"></span>
  12. <span class="glyphicon glyphicon-step-forward forward" id="forward"></span>
  13. <span class="glyphicon glyphicon-volume-up" id="mute"></span>
  14. <input type="range" id="volume" min='0' max='1' step='0.1' value="0.5">
  15. </div>
  16. </div>
  1. .music{
  2. width: 300px;
  3. height: 100px;
  4. margin: 50px auto;
  5. background: #9DF0CA;
  6. position: relative;
  7. color: white;
  8. }
  9. .control{
  10. width: 190px;
  11. position: absolute;
  12. bottom: 0;
  13. left: 110px;
  14. }
  15. .music span{
  16. font-size: 22px;
  17. color: white;
  18. margin-right: 5px;
  19. margin-top: 10px;
  20. }
  21. .poster{
  22. float: left;
  23. }
  24. .music-title{
  25. font-size: 18px;
  26. margin-bottom: 20px;
  27. }
  28. .progress{
  29. margin-bottom: 0px;
  30. width: 80%;
  31. height: 3px;
  32. background: white;
  33. }
  34. .progress-bar{
  35. background: #589FF0;
  36. }
  37. span.time{
  38. font-size: 14px;
  39. position: absolute;
  40. right: 0;
  41. bottom: 27px;
  42. }
  43. #volume{
  44. width: 40px !important;
  45. position: absolute;
  46. bottom: 15px;
  47. right: 20px;
  48. height: 2px;
  49. background: white;
  50. -webkit-appearance:none;
  51. outline: none;
  52. }
  53. #volume::-webkit-slider-thumb{
  54. -webkit-appearance:none;
  55. width: 10px;
  56. height: 10px;
  57. border-radius: 50%;
  58. background: white;
  59. box-shadow: 0 3px 5px #ccc;
  60. }

js控制

  1. //音乐资源
  2. var musicList=[
  3. {
  4. src:'music/jay.mp3',
  5. title:'明明就-周杰伦'
  6. },
  7. {
  8. src:'music/ad.mp3',
  9. title:'水边的阿迪丽娜'
  10. },
  11. {
  12. src:'music/anni.mp3',
  13. title:'安妮的仙境'
  14. },
  15. {
  16. src:'music/summer.mp3',
  17. title:"One summer's day"
  18. }
  19. ];
  20. var playbtn=$('#play');
  21. var backward=$('#backward');
  22. var forward=$('#forward');
  23. var title=$(".music-title");
  24. var mute=$("#mute");
  25. var volume=$("#volume");
  26. var i=0;//当前音乐索引
  27. var audio=new Audio();
  28. audio.src=musicList[0].src;
  29. title.text(musicList[0].title);
  30. playbtn.click(function(event) {
  31. play();
  32. });
  33. function play(){
  34. if (audio.paused===true) {//如果没有播放音乐
  35. $('#play').removeClass('glyphicon-play').addClass('glyphicon-pause');
  36. audio.play();
  37. }else{//如果正在播放音乐
  38. $('#play').removeClass('glyphicon-pause').addClass('glyphicon-play');
  39. audio.pause();
  40. };
  41. }
  42. //上一首
  43. backward.click(function(event) {
  44. i--;
  45. if (i<0) i=musicList.length-1;
  46. changeStaus();
  47. });
  48. //下一首
  49. forward.click(function(event){
  50. i++;
  51. if (i>musicList.length-1) i=0;
  52. changeStaus();
  53. });
  54. //列表循环
  55. audio.onended=function(){
  56. i++;
  57. if (i>musicList.length-1) i=0;
  58. changeStaus();
  59. }
  60. function changeStaus(){
  61. audio.src=musicList[i].src;
  62. title.text(musicList[i].title);
  63. $('#play').removeClass('glyphicon-play').addClass('glyphicon-pause');
  64. audio.play();
  65. }
  66. //静音
  67. mute.click(function(event) {
  68. if (audio.muted==false) {
  69. $(this).removeClass('glyphicon-volume-up').addClass('glyphicon-volume-off');
  70. audio.muted=true;
  71. }else{
  72. $(this).removeClass('glyphicon-volume-off').addClass('glyphicon-volume-up');
  73. audio.muted=false;
  74. }
  75. });
  76. //调节音量
  77. volume.mousemove(function(event) {
  78. audio.volume=$(this).val();
  79. if (audio.volume==0) {
  80. mute.removeClass('glyphicon-volume-up').addClass('glyphicon-volume-off');
  81. }else{
  82. mute.removeClass('glyphicon-volume-off').addClass('glyphicon-volume-up');
  83. }
  84. });
  85. //更新进度条
  86. audio.ontimeupdate=function(){
  87. var width=audio.currentTime/audio.duration*100+'%';
  88. var time=((audio.duration-audio.currentTime)/60).toFixed(2);//剩下的时间
  89. $('.progress-bar').width(width);
  90. $('.time').text(time);
  91. }

总结

audio让制作播放器变得十分简单,主要是绑定事件。关于循环的方式我只写了列表循环,其他的循环方式都比较简单了,自己扩展。还有一个功能没有做,进度条拖动功能,如果可以跳跃播放就更妙了,以后再写吧。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注