Javascript 开启浏览器全屏模式

本文介绍了如何在JavaScript中实现浏览器的全屏模式。详细讲述了全屏模式的改变事件、判断当前全屏状态的API、开启和退出全屏模式的方法,并强调全屏模式必须由用户手势触发。同时,提供了兼容不同浏览器的键盘事件监听和键码值说明,以及避免使用非标准化全屏方法的建议。

通常在某些情况下,我们需要让浏览器开启全屏模式,以便获得更好的视觉体验,先看下全屏模式简单的几个API。

 

浏览器默认绑定

 

非全屏模式下, document的F11按键绑定开启全屏模式
全屏模式下, document的esc和F11 按键绑定关闭全屏模式

屏幕全屏模式改变事件

当成功进入全屏模式后, document会收到一个fullscreenchange 事件。 当退出全屏状态后, document又会收到fullscreenchange 事件。

var screenChange = 'webkitfullscreenchange' || 'mozfullscreenchange' || 'fullscreenchange'

判断当前是否处于全屏状态

非标准:

var isFullScreen = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen;

标准:

var isFullScreen = document.fullscreenElement || document.mozFullScreenElement||document.webkitFullscreenElement

开启全屏模式

function launchFullScreen(element) {

 if (element.requestFullscreen) {

   element.requestFullscreen();

 } else if (element.mozRequestFullScreen) {

   element.mozRequestFullScreen();

 } else if (element.webkitRequestFullscreen) {

   element.webkitRequestFullscreen();

 } else if (element.msRequestFullscreen) {

   element.msRequestFullscreen();

 }

}

 

注意: requestFullscreen是规范的书写模式( s是小写), 但在Gecko内核中仍使用带前缀的大写模式mozRequestFullScreen。

关闭全屏模式

function exitFullscreen() {

 if (document.exitFullscreen) {

   document.exitFullscreen();

 } else if (document.mozCancelFullScreen) {

   document.mozCancelFullScreen();

 } else if (document.webkitExitFullscreen) {

   document.webkitExitFullscreen();

}

 

全屏模式只能由手势触发

了解API后,假如我们监听window.onload事件执行launchFullScreen方法,Chrome浏览器会提示“开启全屏模式API只能由用户手势触发”。

"Failed to execute 'requestFullScreen' on 'Element': API can only be initiated by a user gesture."

原因是浏览器采用安全的机制, 将这种强制全屏模式意为“恶意行为”, 一切非用户主观意愿带来的变化都是不允许的

因此如果你的应用有全屏需求,有两种方案。
1.页面初始化给用户一个“F11开启全屏” 的提示, 并且在延迟几秒之后消失。
2.页面设置一个全屏按钮,单击全屏按钮进入全屏模式,并且隐藏按钮(视觉效果最佳)。

对于第二种方案,需要监听键盘事件:

document.addEventListener("keydown", function(e) {

var currKey = 0

//在FireFox或Opera中,隐藏的变量e是存在的,那么e||event返回e,如果在IE中,隐藏变量e是不存在,则返回event。

var e = e || event;

//IE中,只有keyCode属性,而FireFox中有which和charCode属性,Opera中有keyCode和which属性

var currKey = e.keyCode || e.which || e.charCode;

if (currKey == 112) {

launchFullScreen();

}

}, false);

 

具备了兼容各种浏览器按键模式的监听,但不知道keycode肿么办,112是哪个键?

字母和数字键的键码值(keyCode)

按键键码按键键码按键键码按键键码
A65J74S83149
B66K75T84250
C67L76U85351
D68M77V86452
E69N78W87553
F70O79X88654
G71P80Y89755
H72Q81Z90856
I73R82048957

数字键盘上的键的键码值(keyCode)

按键键码按键键码
0968104
1979105
298*106
399+107
4100Enter108
5101109
6102.110
7103/111

功能键键码值(keyCode)

按键键码按键键码
F1112F7118
F2113F8119
F3114F9120
F4115F10121
F5116F11122
F6117F12123

控制键键码值(keyCode)

按键键码按键键码按键键码按键键码
BackSpace8Esc27Right Arrow39-_189
Tab9Spacebar32Dw Arrow40.>190
Clear12Page Up33Insert45/?191
Enter13Page Down34Delete46`~192
Shift16End35Num Lock144[{219
Control17Home36;:186\220
Alt18Left Arrow37=+187]}221
Cape Lock20Up Arrow38,<188‘“222

避免使用非标准化的方法

非标准化的方法指的是进入草案前浏览器实现的一些方法,避免使用。
window.fullScreen(Firefox)
HTMLMediaElement.webkitDisplayingFullscreen
HTMLMediaElement.webkitEnterFullscreen
HTMLMediaElement.webkitExitFullscreen
HTMLMediaElement.webkitSupportsFullscreen

这里还是要推荐下小编的web前端学习 群 : 569146385,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括 小编自己整理的一份最新的web前端资料和0基础入门教程,欢迎初学和进 阶中的小伙伴。在不忙的时间我会给大家解惑。

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值