超简单的html5视频播放器

效果:

代码很简单

js

  1 define("html5_video_player", [ ‘../avalon-min‘], function(avalon) {
  2     function formatTime(seconds) {
  3         var seconds = Math.round(seconds);
  4         var minutes = Math.floor(seconds / 60);
  5         seconds = Math.floor(seconds % 60);
  6         minutes = (minutes >= 10) ? minutes : "0" + minutes;
  7         seconds = (seconds >= 10) ? seconds : "0" + seconds;
  8         return minutes + ":" + seconds;
  9     }
 10     var playing=false,mute=false,vol=50,fs=false,active=false,inactivityTimeout=timer=null;
 11     avalon.bind($(‘control_btn‘),‘click‘,function(){
 12         if(!playing){
 13             $(‘html5_video‘).play();
 14             $(‘control_btn‘).className=‘html5_video_pause_btn inline-block‘;
 15             playing=true;
 16         }else{
 17             $(‘html5_video‘).pause();
 18             $(‘control_btn‘).className=‘html5_video_play_btn inline-block‘;
 19             playing=false;
 20         }
 21     });
 22     avalon.bind($(‘video_bar‘),‘click‘,function(e){
 23         var a=(e.clientX-$(‘video_bar‘).offsetLeft)/$(‘video_bar‘).offsetWidth;
 24         $(‘html5_video‘).currentTime =a.toFixed(2)*$(‘html5_video‘).duration;
 25     });
 26     avalon.bind($(‘vol_bar‘),‘click‘,function(e){
 27         var a=(e.clientX-$(‘vol_bar‘).offsetLeft-8)/$(‘vol_bar‘).offsetWidth;
 28         vol=$(‘html5_video‘).volume =a;
 29         $(‘vol_value‘).style.width=a*100+‘%‘;
 30     });
 31     avalon.bind($(‘mute_icon‘),‘click‘,function(){
 32         if(!mute){
 33             $(‘html5_video‘).volume=0;
 34             $(‘mute_icon‘).className=‘html5_video_mute1‘;
 35             mute=true;
 36         }else{
 37             $(‘html5_video‘).volume=vol;
 38             $(‘mute_icon‘).className=‘html5_video_mute‘;
 39             mute=false;
 40         }
 41     });
 42     avalon.bind($(‘html5_video‘),‘loadedmetadata‘,function(){
 43         $(‘html5_video_duration‘).innerHTML=formatTime($(‘html5_video‘).duration);
 44         $(‘html5_video‘).volume=0;
 45     });
 46     avalon.bind($(‘html5_video‘),‘timeupdate‘,function(){
 47         $(‘html5_play_time‘).innerHTML=formatTime($(‘html5_video‘).currentTime);
 48         $(‘video_progress_bar‘).style.left=$(‘html5_video‘).currentTime/$(‘html5_video‘).duration*100+‘%‘;
 49     });
 50     avalon.bind($(‘html5_video_fullscreen‘),‘click‘,function(e){
 51         if(!fs){
 52             toggle_fullscreen();
 53         }else{
 54             exit_fullscreen();
 55         }
 56     });
 57     document.onmozfullscreenchange = function() {
 58         if ($(‘html5_video‘).clientWidth +2!= document.documentElement.clientWidth) {
 59             exit_fullscreen();
 60         }
 61     };
 62     document.onwebkitfullscreenchange = function() {
 63         if ($(‘html5_video‘).clientWidth!= document.documentElement.clientWidth) {
 64             exit_fullscreen();
 65         }
 66     };
 67     function exit_fullscreen() {
 68         $(‘html5_video‘).className=‘‘;
 69         fs = false;
 70         active=false;
 71         $(‘video_control‘).className=‘‘;
 72         if (document.exitFullscreen) {
 73             document.exitFullscreen();
 74         } else if (document.webkitCancelFullScreen) {
 75             document.webkitCancelFullScreen();
 76         } else if (document.mozCancelFullScreen) {
 77             document.mozCancelFullScreen();
 78         }
 79     }
 80     function toggle_fullscreen() {
 81         $(‘html5_video‘).className=‘video_fs‘;
 82         fs = true;
 83         $(‘video_control‘).className=‘fullscreen‘;
 84         var elem=$(‘html5_video‘);
 85         if (elem.msRequestFullscreen) {
 86             elem.msRequestFullscreen();
 87         } else if (elem.mozRequestFullScreen) {
 88             elem.mozRequestFullScreen();
 89         } else if (elem.webkitRequestFullscreen) {
 90             elem.webkitRequestFullscreen();
 91         }
 92     }
 93     function updateBuffered() {
 94           var v = $(‘html5_video‘);
 95           var r = v.buffered;
 96           if (r) {
 97             for (var i=0; i<r.length; i++) {
 98               var start = r.start(i);
 99               var end = r.end(i);
100             }
101             $(‘video_buffer_bar‘).style.width=end/$(‘html5_video‘).duration*100+‘%‘;
102           }
103         }
104     setInterval(updateBuffered,500);
105     function b(){
106         if(active){
107             $(‘video_control‘).style.display=‘none‘;
108             active=false;
109             console.log(active);
110         }
111     }
112     avalon.bind($(‘html5_video‘),‘mousemove‘,function(e){
113         if(fs){
114             clearTimeout(inactivityTimeout);
115             active=true;
116             $(‘video_control‘).style.display=‘block‘;
117             inactivityTimeout = setTimeout(b, 5000);
118         }
119     });
120 });

html

 1 <link type="text/css"
 2     href="http://localhost/twitter/css/html5_video_player.css"
 3     rel="stylesheet" />
 4 <div id=‘wrap_html5_video‘>
 5     <div id=‘html5_video_area‘>
 6         <video id="html5_video" width="360" height="240">
 7             <source type=" video/mp4" src="http://localhost/twitter/videos/2.mp4"></source>
 8             <source type=" video/webm"
 9                 src="http://localhost/twitter/videos/2.webm"></source>
10         </video>
11     </div>
12     <div id=‘video_control‘>
13         <div id=‘video_bar‘>
14             <div id=‘video_buffer_bar‘></div>
15             <div id=‘video_progress_bar‘></div>
16         </div>
17         <div id=‘play_control‘>
18             <ul>
19                 <li class=‘inline-block‘><a
20                     class=‘html5_video_play_btn inline-block‘ id=‘control_btn‘></a></li>
21                 <li class=‘inline-block‘><a id=‘mute_icon‘
22                     class=‘html5_video_mute‘></a>
23                     <div id=‘vol_bar‘ class=‘inline-block‘>
24                         <p id=‘vol_value‘></p>
25                     </div></li>
26                 <li class=‘inline-block‘ id=‘html5_video_time‘><span
27                     id=‘html5_play_time‘>00:00</span><span>/</span><span
28                     id=‘html5_video_duration‘>33:44</span></li>
29                 <li class=‘inline-block‘><a id=‘html5_video_fullscreen‘
30                     class=‘inline-block‘></a></li>
31             </ul>
32         </div>
33         <div id=‘a‘></div>
34     </div>
35     <div id=‘buffered_log‘></div>
36 </div>
37 <script type="text/javascript">
38     require(html5/html5_video_player);
39 </script>

css

  1 @CHARSET "UTF-8";
  2 
  3 #wrap_html5_video {
  4     padding: 10px;
  5     width: 360px;
  6 }
  7 
  8 #vol_bar,#video_bar,#vol_value {
  9     height: 9px;
 10     background-color: #999999;
 11 }
 12 
 13 #vol_bar {
 14     width: 100px;
 15     cursor: pointer;
 16 }
 17 
 18 #vol_value {
 19     background-color: #179df7;
 20     width: 50%;
 21 }
 22 
 23 #html5_video {
 24     display: block;
 25     border: 1px solid #c0deed;
 26 }
 27 
 28 #video_buffer_bar {
 29     background-color: #179DF7;
 30     width: 0;
 31 }
 32 
 33 #video_progress_bar,#video_buffer_bar {
 34     position: absolute;
 35     height: 100%;
 36 }
 37 
 38 #video_progress_bar {
 39     background-color: #0066FF;
 40     width: 2px;
 41     left: 0;
 42 }
 43 
 44 .html5_video_pause_btn,.html5_video_play_btn {
 45     width: 40px;
 46     height: 40px;
 47     cursor: pointer;
 48 }
 49 
 50 .html5_video_play_btn {
 51     background: url("http://localhost/twitter/images/html5_video.jpg") 0 0
 52         no-repeat;
 53 }
 54 
 55 .html5_video_play_btn:hover {
 56     background: url("http://localhost/twitter/images/html5_video.jpg") -41px
 57         0 no-repeat;
 58 }
 59 
 60 .html5_video_pause_btn {
 61     background: url("http://localhost/twitter/images/html5_video.jpg") 0
 62         -42px no-repeat;
 63 }
 64 
 65 .html5_video_pause_btn:hover {
 66     background: url("http://localhost/twitter/images/html5_video.jpg") -41px
 67         -42px no-repeat;
 68 }
 69 
 70 #play_control a,#vol_bar {
 71     vertical-align: middle;
 72 }
 73 
 74 #html5_video_fullscreen {
 75     width: 25px;
 76     background: url("http://localhost/twitter/images/html5_video.jpg") 0
 77         -310px no-repeat;
 78     height: 18px;
 79 }
 80 
 81 #play_control #html5_video_time {
 82     font-size: 14px;
 83 }
 84 
 85 #play_control li,#play_control ul {
 86     font-size: 0;
 87 }
 88 
 89 #play_control li:last-child {
 90     position: absolute;
 91     right: 0;
 92 }
 93 
 94 .html5_video_mute1 {
 95     background: url("http://localhost/twitter/images/html5_video.jpg")
 96         no-repeat scroll -79px -170px rgba(0, 0, 0, 0);
 97 }
 98 
 99 .html5_video_mute {
100     background: url("http://localhost/twitter/images/html5_video.jpg")
101         no-repeat scroll 0 -170px rgba(0, 0, 0, 0);
102 }
103 
104 #mute_icon {
105     cursor: pointer;
106     display: inline-block;
107     height: 15px;
108     width: 18px;
109 }
110 
111 .html5_video_mute:hover {
112     background: url("http://localhost/twitter/images/html5_video.jpg") -19px
113         -170px no-repeat;
114 }
115 
116 #play_control li {
117     height: 40px;
118     vertical-align: top;
119     margin: 0 5px;
120 }
121 
122 #play_control li:after {
123     display: inline-block;
124     width: 0;
125     height: 100%;
126     vertical-align: middle;
127     content: ‘‘;
128 }
129 
130 #play_control,#video_bar,#vol_bar {
131     position: relative;
132 }
133 
134 body .fullscreen {
135     position: fixed;
136     left: 0;
137     bottom: 0;
138     width: 100%;
139     overflow: hidden;
140     z-index: 2147483647;
141     background-color: #fff;
142 }
143 
144 video::-webkit-media-controls {
145     display: none !important;
146 }

转载请注明:TheViper

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。