JavaScript实现全屏的四种主流方案与代码解析
本文详细解析了JavaScript实现网页全屏的四种常见写法。涵盖使用document.documentElement进行整体全屏、针对特定元素的全屏操作、结合CSS伪类处理退出全屏样式还原,以及利用jQuery和ActiveXObject兼容旧版IE浏览器的方案。通过对比不同实现方式,帮助开发者根据浏览器版本和功能需求选择最佳的全屏策略。
JavaScript实现全屏概述
在Web开发中,利用JavaScript或jQuery实现网页全屏显示是一项常见需求,旨在提升用户体验或展示特定内容。
方案一:整体页面全屏显示
第一种方法是通过操作document.documentElement来实现整体页面的全屏显示,这是最基础且兼容性较好的方式。
HTML结构部分主要包含一个容器div,内部放置触发全屏和退出全屏的两个按钮,分别对应id为full-screen和exit-fullscreen。
<div class="container"
<button id="full-screen">全屏</button>
<button id="exit-fullscreen">退出</button>
</div>
CSS样式定义了页面的基础外观,包括背景色、容器宽度、内边距及圆角等。特别需要注意的是,针对html标签的:-ms-fullscreen和:fullscreen伪类定义了全屏状态下的背景色及宽度,以确保内容在IE等浏览器中居中显示。
/* Basic element styles */
html {
color: #000;
background: paleturquoise;
min-height: 100%;
}
/* Structure */
.container {
text-align: center;
width: 500px;
min-height: 600px;
background: #fff;
border: 1px solid #ccc;
border-top: none;
margin: 20px auto;
padding: 20px;
border-radius: 10px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
box-shadow: 1px 1px 10px #000;
-moz-box-shadow: 1px 1px 10px #000;
-webkit-box-shadow: 1px 1px 5px #000;
}
button{
margin: 200px auto;
width: 100px;
height: 30px;
background-color: aliceblue;
}
/* Fullscreen */
html:-moz-full-screen {
background: blue;
}
html:-webkit-full-screen {
background: blue;
}
html:-ms-fullscreen {
background: blue;
width: 100%; /* needed to center contents in IE */
}
html:fullscreen {
background: blue;
}
JavaScript代码通过addEventListener监听按钮点击事件。核心逻辑是获取document.documentElement,并依次尝试调用requestFullscreen、msRequestFullscreen及mozRequestFullScreen等浏览器特定的全屏API。同时,监听webkitfullscreenchange事件以更新全屏状态标识。
(function () {
var viewFullScreen = document.getElementById("full-screen");
if (viewFullScreen) {
viewFullScreen.addEventListener("click", function () {
var docElm = document.documentElement;
if (docElm.requestFullscreen) {
docElm.requestFullscreen();
}
else if (docElm.msRequestFullscreen) {
docElm.msRequestFullscreen();
}
else if (docElm.mozRequestFullScreen) {
docElm.mozRequestFullScreen();
}
else if (docElm.webkitRequestFullScreen) {
docElm.webkitRequestFullScreen();
}
}, false);
}
var cancelFullScreen = document.getElementById("exit-fullscreen");
if (cancelFullScreen) {
cancelFullScreen.addEventListener("click", function () {
if (document.exitFullscreen) {
document.exitFullscreen();
}
else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
}
else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
}
}, false);
}
var fullscreenState = document.getElementById("fullscreen-state");
if (fullscreenState) {
document.addEventListener("fullscreenchange", function () {
fullscreenState.innerHTML = (document.fullscreenElement)? "" : "not ";
}, false);
document.addEventListener("msfullscreenchange", function () {
fullscreenState.innerHTML = (document.msFullscreenElement)? "" : "not ";
}, false);
document.addEventListener("mozfullscreenchange", function () {
fullscreenState.innerHTML = (document.mozFullScreen)? "" : "not ";
}, false);
document.addEventListener("webkitfullscreenchange", function () {
fullscreenState.innerHTML = (document.webkitIsFullScreen)? "" : "not ";
}, false);
}
})();
方案二:特定元素全屏及旧版兼容
第二种方法聚焦于对页面中特定元素(而非整个文档)进行全屏显示,这通常用于视频播放器或图片查看器等场景。
HTML结构包含一个外部容器和一个内部content div,content div内包含标题、全屏按钮及退出按钮。这种结构允许用户仅对content区域进行全屏操作。
<div style="margin:0 auto;height:600px;width:700px;">
<button id="btn">全屏</button>
<div id="content" style="margin:0 auto;height:500px;width:700px; background:#ccc;" >
<h1>全屏展示和退出全屏</h1>
</div>
</div>
JavaScript部分定义了requestFullScreen函数,该函数尝试调用元素的requestFullScreen、webkitRequestFullScreen或mozRequestFullScreen方法。此外,代码还包含了对旧版IE浏览器的兼容处理,通过ActiveXObject调用WScript.Shell发送F11键来实现全屏,并设置了全屏后元素的宽高样式。
document.getElementById("btn").onclick=function(){
var elem = document.getElementById("content");
requestFullScreen(elem);
/*
注意这里的样式的设置表示全屏显示之后的样式,
退出全屏后样式还在,
若要回到原来样式,需在退出全屏里把样式还原回去
(见写法三)
*/
elem.style.height = '800px';
elem.style.width = '1000px';
};
function requestFullScreen(element) {
var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen;
if (requestMethod) {
requestMethod.call(element);
} else if (typeof window.ActiveXObject !== "undefined") {
var wscript = new ActiveXObject("WScript.Shell");
if (wscript !== null) {
wscript.SendKeys("{F11}");
}
}
}
方案三:退出全屏样式还原处理
第三种方法在第二种的基础上,增加了退出全屏后样式还原的逻辑,确保全屏退出后页面布局回到初始状态。
HTML结构与第二种方法类似,但按钮顺序略有调整,确保在content内部可以方便地触发全屏和退出全屏操作。
<div style="margin:0 auto;height:600px;width:700px;">
<div id="content" style="margin:0 auto;height:500px;width:700px; background:#ccc;" >
<button id="btn">全屏</button>
<h1>全屏展示和退出全屏</h1>
<button id="btnn" >退出</button>
</div>
</div>
JavaScript代码在监听全屏状态变化时,不仅处理进入全屏的逻辑,还重点处理了退出全屏的事件。通过监听fullscreenchange或webkitfullscreenchange事件,在退出全屏时将元素的宽高样式重置为初始值,避免样式残留影响页面布局。
document.getElementById("btn").onclick=function(){
var elem = document.getElementById("content");
requestFullScreen(elem);
/*
注意这里的样式的设置表示全屏显示之后的样式,
退出全屏后样式还在,
若要回到原来样式,需在退出全屏里把样式还原回去
*/
elem.style.height = '800px';
elem.style.width = '1000px';
};
document.getElementById("btnn").onclick=function () {
exitFullscreen();
};
/*
全屏显示
*/
function requestFullScreen(element) {
var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen;
requestMethod.call(element);
};
/*
全屏退出
*/
function exitFullscreen() {
var elem = document;
var elemd = document.getElementById("content");
if (elem.webkitCancelFullScreen) {
elem.webkitCancelFullScreen();
} else if (elem.mozCancelFullScreen) {
elemd.mozCancelFullScreen();
} else if (elem.cancelFullScreen) {
elem.cancelFullScreen();
} else if (elem.exitFullscreen) {
elem.exitFullscreen();
} else {
//浏览器不支持全屏API或已被禁用
};
/*
退出全屏后样式还原
*/
elemd.style.height = '500px';
elemd.style.width = '700px'
}
方案四:基于jQuery的全屏实现
第四种方法引入了jQuery库,简化了DOM操作和事件绑定的代码量,同时保持了与前几种方法类似的全屏逻辑。
HTML结构保持不变,继续使用id为btn的按钮触发全屏操作。
<div id="cont" STYLE="width: 500px;height: 300px;background-color: aliceblue;margin: auto">
<button id="btn">全屏&退出</button>
</div>
CSS样式与第一种方法一致,定义了容器和全屏状态下的样式规则。
.full{
position: fixed;
align-content: center;
/*top: 10px;*/
/*left: 10px;*/
/*
原来基础的百分百
*/
width: 100%;
height: 100%;
overflow: auto;
}
JavaScript文件fullScreen.js封装了全屏相关的核心逻辑,包括检测浏览器支持的全屏API以及处理全屏状态变化的回调函数。
(function ($) {
// Adding a new test to the jQuery support object
$.support.fullscreen = supportFullScreen();
// Creating the plugin
$.fn.fullScreen = function (props) {
if (!$.support.fullscreen || this.length != 1) {
// The plugin can be called only
// on one element at a time
return this;
}
if (fullScreenStatus()) {
// if we are already in fullscreen, exit
cancelFullScreen();
return this;
}
// You can potentially pas two arguments a color
// for the background and a callback function
var options = $.extend({
'background': '#111',
'callback': function () {}
}, props);
// This temporary div is the element that is
// actually going to be enlarged in full screen
var fs = $('<div>', {
'css': {
'overflow-y': 'auto',
'background': options.background,
'width': '100%',
'height': '100%',
'align': 'center'
}
});
var elem = this;
// You can use the .fullScreen class to
// apply styling to your element
elem.addClass('fullScreen');
// Inserting our element in the temporary
// div, after which we zoom it in fullscreen
fs.insertBefore(elem);
fs.append(elem);
requestFullScreen(fs.get(0));
fs.click(function (e) {
if (e.target == this) {
// If the black bar was clicked
cancelFullScreen();
}
});
elem.cancel = function () {
cancelFullScreen();
return elem;
};
onFullScreenEvent(function (fullScreen) {
if (!fullScreen) {
// We have exited full screen.
// Remove the class and destroy
// the temporary div
elem.removeClass('fullScreen').insertBefore(fs);
fs.remove();
}
// Calling the user supplied callback
options.callback(fullScreen);
});
return elem;
};
// These helper functions available only to our plugin scope.
function supportFullScreen() {
var doc = document.documentElement;
return ('requestFullscreen' in doc) ||
('mozRequestFullScreen' in doc && document.mozFullScreenEnabled) ||
('webkitRequestFullScreen' in doc);
}
function requestFullScreen(elem) {
if (elem.requestFullscreen) {
elem.requestFullscreen();
} else if (elem.mozRequestFullScreen) {
elem.mozRequestFullScreen();
} else if (elem.webkitRequestFullScreen) {
elem.webkitRequestFullScreen();
}
}
function fullScreenStatus() {
return document.fullscreen ||
document.mozFullScreen ||
document.webkitIsFullScreen;
}
function cancelFullScreen() {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
}
}
function onFullScreenEvent(callback) {
$(document).on("fullscreenchange mozfullscreenchange webkitfullscreenchange", function () {
// The full screen status is automatically
// passed to our callback as an argument.
callback(fullScreenStatus());
});
}
})(jQuery);
JavaScript文件myJS.js负责具体的业务逻辑,如绑定按钮点击事件、调用全屏函数以及处理退出全屏后的样式还原。通过jQuery简化了代码结构,提高了开发效率。
$(function () {
$("#btn").click(function () {
$("#cont").fullScreen();
})
});
以上介绍了四种JavaScript实现全屏显示的方法,各有优劣。开发者可根据项目需求、目标浏览器版本及是否需要元素级全屏等因素,选择最适合的实现方案。
ES6模块化中js文件怎么用import和export交互
2026-11-05 17:00:48
JS读取本地文件时报错或无响应的常见原因
2026-11-05 16:32:31
let、const与var的区别:JavaScript变量声明最佳实践
2026-11-05 14:16:38
JS中直接定义静态二维数组的字面量写法
2026-11-05 14:16:08
JS 怎么查找字符串中所有匹配项的位置
2026-11-05 14:15:53
