HTML5/javascript video fullScreen全屏实现方式
在html5中,全屏方法可以适用于很多html 元素,不仅仅是video
代码如下:
1<!doctype html>
2<html>
3<head>
4<meta charset="utf-8" />
5<title>全屏问题</title>
6<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
7<meta http-equiv="imagetoolbar" content="no"/>
8<meta name="apple-mobile-web-app-capable" content="yes"/>
9<meta http-equiv="X-UA-Compatible" content="IE=Edge">
10<style type="text/css">
11*{
12 padding: 0px;
13 margin: 0px;
14}
15
16body div.videobox{
17 width: 400px;
18 height: 320px;
19 margin: 100px auto;
20 background-color:#000;
21}
22
23body div.videobox video.video
24{
25width: 100%;
26 height: 100%;
27}
28
29:-webkit-full-screen {
30
31}
32
33:-moz-full-screen {
34
35}
36
37:-ms-fullscreen {
38
39}
40
41:-o-fullscreen {
42
43}
44
45:full-screen {
46
47}
48
49:fullscreen {
50
51}
52
53:-webkit-full-screen video {
54 width: 100%;
55 height: 100%;
56}
57:-moz-full-screen video{
58 width: 100%;
59 height: 100%;
60}
61 </style>
62</head>
63<body>
64
65
66<div id="videobox">
67
68 <video controls="controls" preload="preload" id="video" poster="poster.jpg">
69 <source src="./movie.ogg" type="video/ogg" />
70 <source src="./movie.mp4" type="video/mp4" />
71 <source src="./movie.webm" type="video/webm" />
72 <object data="./movie.mp4" width="100%" height="100%">
73 <embed width="100%" height="100%" src="./movie.swf" />
74 </object>
75
76 </video>
77 <button id="fullScreenBtn">全屏</button>
78</div>
79
80
81<script type="text/javascript">
82
83//反射調用
84var invokeFieldOrMethod = function(element, method)
85{
86 var usablePrefixMethod;
87 ["webkit", "moz", "ms", "o", ""].forEach(function(prefix) {
88 if (usablePrefixMethod) return;
89 if (prefix === "") {
90 // 无前缀,方法首字母小写
91 method = method.slice(0,1).toLowerCase() + method.slice(1);
92 }
93 var typePrefixMethod = typeof element[prefix + method];
94 if (typePrefixMethod + "" !== "undefined") {
95 if (typePrefixMethod === "function") {
96 usablePrefixMethod = element[prefix + method]();
97 } else {
98 usablePrefixMethod = element[prefix + method];
99 }
100 }
101 });
102
103 return usablePrefixMethod;
104};
105
106//進入全屏
107 function launchFullscreen(element)
108 {
109 //此方法不可以在異步任務中執行,否則火狐無法全屏
110 if(element.requestFullscreen) {
111 element.requestFullscreen();
112 } else if(element.mozRequestFullScreen) {
113 element.mozRequestFullScreen();
114 } else if(element.msRequestFullscreen){
115 element.msRequestFullscreen();
116 } else if(element.oRequestFullscreen){
117 element.oRequestFullscreen();
118 }
119 else if(element.webkitRequestFullscreen)
120 {
121 element.webkitRequestFullScreen();
122 }else{
123
124 var docHtml = document.documentElement;
125 var docBody = document.body;
126 var videobox = document.getElementById('videobox');
127 var cssText = 'width:100%;height:100%;overflow:hidden;';
128 docHtml.style.cssText = cssText;
129 docBody.style.cssText = cssText;
130 videobox.style.cssText = cssText+';'+'margin:0px;padding:0px;';
131 document.IsFullScreen = true;
132
133 }
134 }
135//退出全屏
136 function exitFullscreen()
137 {
138 if (document.exitFullscreen) {
139 document.exitFullscreen();
140 } else if (document.msExitFullscreen) {
141 document.msExitFullscreen();
142 } else if (document.mozCancelFullScreen) {
143 document.mozCancelFullScreen();
144 } else if(document.oRequestFullscreen){
145 document.oCancelFullScreen();
146 }else if (document.webkitExitFullscreen){
147 document.webkitExitFullscreen();
148 }else{
149 var docHtml = document.documentElement;
150 var docBody = document.body;
151 var videobox = document.getElementById('videobox');
152 docHtml.style.cssText = "";
153 docBody.style.cssText = "";
154 videobox.style.cssText = "";
155 document.IsFullScreen = false;
156 }
157 }
158document.getElementById('fullScreenBtn').addEventListener('click',function(){
159 launchFullscreen(document.getElementById('video'));
160 window.setTimeout(function exit(){
161//檢查瀏覽器是否處於全屏
162if(invokeFieldOrMethod(document,'FullScreen') || invokeFieldOrMethod(document,'IsFullScreen') || document.IsFullScreen)
163{
164exitFullscreen();
165}
166 },5*1000);
167},false);
168
169</script>
170</body>
171
172</html>
173
关键部分在于进入全屏以及退出全屏,思路可参考(但不知道为什么在Linux Chrome测试未通过(?)),仅作参考之用。
评论 (0)