09-HTML5举例:简单的视频播放器

我们采用 Bootstrap 网站的图标字体,作为播放器的按钮图标。

index.html的代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <!-- 引入字体图标的文件-->
  7. <link rel="stylesheet" href="css/font-awesome.min.css"/>
  8. <style>
  9. *{
  10. margin: 0;
  11. padding: 0;
  12. }
  13. /*多媒体标题*/
  14. figcaption{
  15. text-align: center;
  16. line-height: 150px;
  17. font-family: "Microsoft Yahei";
  18. font-size:24px;
  19. }
  20. /* 播放器*/
  21. .palyer{
  22. width: 720px;
  23. height: 360px;
  24. margin:10px auto;
  25. border: 1px solid #000;
  26. background: url(images/loading.gif) center no-repeat #000;
  27. background-size:auto 100%;
  28. position: relative;
  29. border-radius: 20px;
  30. }
  31. .palyer video{
  32. height:100%;
  33. display: block;
  34. margin:0 auto;
  35. /*display: none;*/
  36. }
  37. /* 控制条*/
  38. .controls{
  39. width: 700px;
  40. height:40px;
  41. background-color: rgba(255, 255, 0, 0.3);
  42. position: absolute;
  43. bottom:10px;
  44. left:10px;
  45. border-radius: 10px;
  46. }
  47. /*开关*/
  48. .switch{
  49. position: absolute;
  50. width: 20px;
  51. height: 20px;
  52. left:10px;
  53. top:10px;
  54. text-align: center;
  55. line-height: 20px;
  56. color:yellow;
  57. }
  58. /*进度条*/
  59. .progress{
  60. width: 432px;
  61. height: 10px;
  62. position: absolute;
  63. background-color: rgba(255,255,255,0.4);
  64. left:40px;
  65. top:15px;
  66. border-radius: 4px;
  67. overflow: hidden;
  68. }
  69. /* 当前进度*/
  70. .curr-progress{
  71. width: 50%;
  72. height: 10px;
  73. background-color: #fff;
  74. }
  75. /* 时间模块*/
  76. .time{
  77. width: 120px;
  78. height: 20px;
  79. text-align: center;
  80. line-height: 20px;
  81. color:#fff;
  82. position: absolute;
  83. left:510px;
  84. top:10px;
  85. font-size:12px;
  86. }
  87. /*全屏*/
  88. .extend{
  89. position: absolute;
  90. width: 20px;
  91. height: 20px;
  92. right:20px;
  93. top:10px;
  94. text-align: center;
  95. line-height: 20px;
  96. color:yellow;
  97. }
  98. </style>
  99. </head>
  100. <body>
  101. <!-- 多媒体-->
  102. <figure>
  103. <!-- 多媒体标题-->
  104. <figcaption>视频案例</figcaption>
  105. <div class="palyer">
  106. <video src="video/fun.mp4"></video>
  107. <!-- 控制条-->
  108. <div class="controls">
  109. <!-- 播放暂停-->
  110. <a href="#" class="switch icon-play"></a>
  111. <div class="progress">
  112. <!-- 当前进度-->
  113. <div class="curr-progress"></div>
  114. </div>
  115. <!-- 时间-->
  116. <div class="time">
  117. <span class="curr-time">00:00:00</span>/<span class="total-time">00:00:00</span>
  118. </div>
  119. <!-- 全屏-->
  120. <a href="#" class="extend icon-resize-full"></a>
  121. </div>
  122. </div>
  123. </figure>
  124. <script>
  125. // 思路:
  126. /*
  127. * 1、点击按钮 实现播放暂停并且切换图标
  128. * 2、算出视频的总时显示出出来
  129. * 3、当视频播放的时候,进度条同步,当前时间同步
  130. * 4、点击实现全屏
  131. */
  132. // 获取需要的标签
  133. var video=document.querySelector('video');
  134. // 播放按钮
  135. var playBtn=document.querySelector('.switch');
  136. // 当前进度条
  137. var currProgress=document.querySelector('.curr-progress');
  138. // 当前时间
  139. var currTime=document.querySelector('.curr-time');
  140. // 总时间
  141. var totalTime=document.querySelector('.total-time');
  142. // 全屏
  143. var extend=document.querySelector('.extend');
  144. var tTime=0;
  145. // 1、点击按钮 实现播放暂停并且切换图标
  146. playBtn.onclick=function(){
  147. // 如果视频播放 就暂停,如果暂停 就播放
  148. if(video.paused){
  149. // 播放
  150. video.play();
  151. //切换图标
  152. this.classList.remove('icon-play');
  153. this.classList.add('icon-pause');
  154. }else{
  155. // 暂停
  156. video.pause();
  157. // 切换图标
  158. this.classList.remove('icon-pause');
  159. this.classList.add('icon-play');}
  160. }
  161. // 2、算出视频的总时显示出出来
  162. // 当时加载完成后的事件,视频能播放的时候
  163. video.oncanplay=function(){
  164. // 获取视频总时长
  165. tTime=video.duration;
  166. console.log(tTime);
  167. // 将总秒数 转换成 时分秒的格式:00:00:00
  168. // 小时
  169. var h=Math.floor(tTime/3600);
  170. // 分钟
  171. var m=Math.floor(tTime%3600/60);
  172. // 秒
  173. var s=Math.floor(tTime%60);
  174. // console.log(h);
  175. // console.log(m);
  176. // console.log(s);
  177. // 把数据格式转成 00:00:00
  178. h=h>=10?h:"0"+h;
  179. m=m>=10?m:"0"+m;
  180. s=s>=10?s:"0"+s;
  181. console.log(h);
  182. console.log(m);
  183. console.log(s);
  184. // 显示出来
  185. totalTime.innerHTML=h+":"+m+":"+s;
  186. }
  187. // * 3、当视频播放的时候,进度条同步,当前时间同步
  188. // 当时当前时间更新的时候触发
  189. video.ontimeupdate=function(){
  190. // 获取视频当前播放的时间
  191. // console.log(video.currentTime);
  192. // 当前播放时间
  193. var cTime=video.currentTime;
  194. // 把格式转成00:00:00
  195. var h=Math.floor(cTime/3600);
  196. // 分钟
  197. var m=Math.floor(cTime%3600/60);
  198. // 秒
  199. var s=Math.floor(cTime%60);
  200. // 把数据格式转成 00:00:00
  201. h=h>=10?h:"0"+h;
  202. m=m>=10?m:"0"+m;
  203. s=s>=10?s:"0"+s;
  204. // 显示出当前时间
  205. currTime.innerHTML=h+":"+m+":"+s;
  206. // 改变进度条的宽度: 当前时间/总时间
  207. var value=cTime/tTime;
  208. currProgress.style.width=value*100+"%";
  209. }
  210. // 全屏
  211. extend.onclick=function(){
  212. // 全屏的h5代码
  213. video.webkitRequestFullScreen();
  214. }
  215. </script>
  216. </body>
  217. </html>

工程文件: