Javascript 开启浏览器全屏模式
通常在某些情况下,我们需要让浏览器开启全屏模式,以便获得更好的视觉体验,先看下全屏模式简单的几个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)
按键 | 键码 | 按键 | 键码 | 按键 | 键码 | 按键 | 键码 |
---|---|---|---|---|---|---|---|
A | 65 | J | 74 | S | 83 | 1 | 49 |
B | 66 | K | 75 | T | 84 | 2 | 50 |
C | 67 | L | 76 | U | 85 | 3 | 51 |
D | 68 | M | 77 | V | 86 | 4 | 52 |
E | 69 | N | 78 | W | 87 | 5 | 53 |
F | 70 | O | 79 | X | 88 | 6 | 54 |
G | 71 | P | 80 | Y | 89 | 7 | 55 |
H | 72 | Q | 81 | Z | 90 | 8 | 56 |
I | 73 | R | 82 | 0 | 48 | 9 | 57 |
数字键盘上的键的键码值(keyCode)
按键 | 键码 | 按键 | 键码 |
---|---|---|---|
0 | 96 | 8 | 104 |
1 | 97 | 9 | 105 |
2 | 98 | * | 106 |
3 | 99 | + | 107 |
4 | 100 | Enter | 108 |
5 | 101 | – | 109 |
6 | 102 | . | 110 |
7 | 103 | / | 111 |
功能键键码值(keyCode)
按键 | 键码 | 按键 | 键码 |
---|---|---|---|
F1 | 112 | F7 | 118 |
F2 | 113 | F8 | 119 |
F3 | 114 | F9 | 120 |
F4 | 115 | F10 | 121 |
F5 | 116 | F11 | 122 |
F6 | 117 | F12 | 123 |
控制键键码值(keyCode)
按键 | 键码 | 按键 | 键码 | 按键 | 键码 | 按键 | 键码 |
---|---|---|---|---|---|---|---|
BackSpace | 8 | Esc | 27 | Right Arrow | 39 | -_ | 189 |
Tab | 9 | Spacebar | 32 | Dw Arrow | 40 | .> | 190 |
Clear | 12 | Page Up | 33 | Insert | 45 | /? | 191 |
Enter | 13 | Page Down | 34 | Delete | 46 | `~ | 192 |
Shift | 16 | End | 35 | Num Lock | 144 | [{ | 219 |
Control | 17 | Home | 36 | ;: | 186 | \ | 220 |
Alt | 18 | Left Arrow | 37 | =+ | 187 | ]} | 221 |
Cape Lock | 20 | Up Arrow | 38 | ,< | 188 | ‘“ | 222 |
避免使用非标准化的方法
非标准化的方法指的是进入草案前浏览器实现的一些方法,避免使用。
window.fullScreen(Firefox)
HTMLMediaElement.webkitDisplayingFullscreen
HTMLMediaElement.webkitEnterFullscreen
HTMLMediaElement.webkitExitFullscreen
HTMLMediaElement.webkitSupportsFullscreen
原文发布时间:2018-6-19
原文作者:伯乐在线
本文来源csdn博客如需转载请紧急联系作者

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Html网页标签曝光埋点
移动开发过程中经常要用埋点来促进产品的改进,在native端做埋点相对来说简单一点,比如曝光,在view的类中可以使用显示回调来做,但在网页中要如何做埋点呢,比如要知道一个div标签的曝光次数应该怎么做,类比客户端自然是想知道有没有类似显示的回调,很不幸,Html里没有这个事件回调,但onload是有的,要实现曝光埋点,需要自己实现曝光事件的检测.以下是实现思路: 曝光,即是标签从浏览器中不可见到可见区域内时触发,关键就是要检测标签当前的位置还有当前可见区域的位置.如果这标签的所表示的区域矩形和可见区域相交,则可以认为标签被看到.那么就要分别计算标签区域大小和坐标和可见区域大小和坐标. 可见区域坐标和大小可以使用window对象获取scrollTop,scrollLeft和clientWidth,clientHeight来得到.标签的大小可以通过getElementById来获取到div对象然后得到相应属性.为了效率,我们可以先在body加载完后先获得好标签的大小和位置,然后在窗口的滚动时实时计算可见区域,并且计算可见区域是否和各个标签区域相交由此得到标签是否可见,以下是代码: <...
- 下一篇
JavaScript 异步编程--Generator函数、async、await
JavaScript 异步编程–Generator函数 Generator(生成器)是ES6标准引入的新的数据类型,其最大的特点就是可以交出函数的执行的控制权,即:通过yield关键字标明需要暂停的语句,执行时遇到yield语句则返回该语句执行结果,等到调用next函数时(也就是说可以通过控制调用next函数的时机达到控制generator执行的目的)重新回到暂停的地方往下执行,直至generator执行结束。 基本结构 以下是一个典型的generator函数的示例,以”*”标明为generator。 function* gen(x){ var y = yield x + 2; console.log(y); // undefine var yy = yield x + 3; console.log(yy); // 6 return y; // 没啥用 } var g = gen(1); var r1 = g.next(); console.log(r1); // { value: 3, done: false } var r2 = g.next(); console.log(r2);...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池