H5 DOM 全屏 api requestFullscreen

分手后的思念是犯贱 2022-05-29 04:08 294阅读 0赞

文章转载自:http://javascript.ruanyifeng.com/htmlapi/fullscreen.html#toc7

js 设置、退出和判断全屏的方法

  1. 设置全屏
  2. 退出全屏
  3. 全屏属性
  4. 全屏事件
  5. 全屏状态的CSS

设置全屏

  1. /*** [requestFullScreen 设置全屏]*/
  2. function requestFullScreen() { var de = document.documentElement; if (de.requestFullscreen) { de.requestFullscreen(); } else if (de.mozRequestFullScreen) { de.mozRequestFullScreen(); } else if (de.webkitRequestFullScreen) { de.webkitRequestFullScreen(); }}

退出全屏

  1. /*** [exitFullscreen 退出全屏]*/function exitFullscreen() { var de = document; if (de.exitFullscreen) { de.exitFullscreen(); } else if (de.mozCancelFullScreen) { de.mozCancelFullScreen(); } else if (de.webkitCancelFullScreen) { de.webkitCancelFullScreen(); }}

属性

fullscreenElement

  1. var fullscreenElement = document.fullscreenElement ||
  2. document.mozFullScreenElement ||
  3. document.webkitFullscreenElement;

fullscreenElement属性返回正处于全屏状态的Element节点,如果当前没有节点处于全屏状态,则返回null。

fullscreenEnabled

  1. var fullscreenEnabled = document.fullscreenEnabled ||
  2. document.mozFullScreenEnabled ||
  3. document.webkitFullscreenEnabled ||
  4. document.msFullscreenEnabled;
  5. if (fullscreenEnabled) {
  6. setFullscreen();
  7. } else {
  8. console.log('浏览器当前不能全屏');
  9. }

fullscreenEnabled属性返回一个布尔值,表示当前文档是否可以切换到全屏状态。

判断全屏

fullscreenchange

  1. document.addEventListener('fullscreenchange', function(){ });
  2. document.addEventListener('webkitfullscreenchange', function(){ });
  3. document.addEventListener('mozfullscreenchange', function(){ });
  4. document.addEventListener('MSFullscreenChange', function(){ });

fullscreenchange事件:浏览器进入或离开全屏时触发。

fullscreenerror

  1. document.addEventListener('fullscreenerror', function(){ });
  2. document.addEventListener('webkitfullscreenerror', function(){ });
  3. document.addEventListener('mozfullscreenerror', function(){ });
  4. document.addEventListener('MSFullscreenError', function(){ });

fullscreenerror事件:浏览器无法进入全屏时触发,可能是技术原因,也可能是用户拒绝。
更详细的全屏判断请点击这里

全屏状态下的CSS

  1. :-webkit-full-screen { /* properties */ }
  2. :-moz-full-screen { /* properties */ }
  3. :-ms-fullscreen { /* properties */ }
  4. :full-screen { /*pre-spec */ /* properties */ }
  5. :fullscreen { /* spec */ /* properties */ }
  6. /* deeper elements */
  7. video:-webkit-full-screen { width: 100%; height: 100%; }

全屏状态下,大多数浏览器的CSS支持:full-screen伪类,只有IE11支持:fullscreen伪类。使用这个伪类,可以对全屏状态设置单独的CSS属性。

目录

    • js 设置退出和判断全屏的方法

      • 设置全屏
      • 退出全屏
      • 属性

        • fullscreenElement
        • fullscreenEnabled
      • 判断全屏

        • fullscreenchange
        • fullscreenerror
      • 全屏状态下的CSS
    • 目录
    • 浏览器兼容
    • 参考链接

浏览器兼容

  1. IE11+
  2. Chrome
  3. FireFox

参考链接

http://javascript.ruanyifeng.com/htmlapi/fullscreen.html#toc7


#

判断浏览器是否支持requestFullscreen

首先是一段判断浏览器是否支持h5全屏api(requestFullscreen)的代码,如下:

  1. /** * [isFullscreenEnabled 判断全屏模式是否是可用] * @return [支持则返回true,不支持返回false] */
  2. function isFullscreenEnabled(){
  3. return document.fullscreenEnabled ||
  4. document.mozFullScreenEnabled ||
  5. document.webkitFullscreenEnabled ||
  6. document.msFullscreenEnabled || false;
  7. }

现在来区分一下全屏的两种情况

第一种:局部全屏,这里得把使用h5全屏api(requestFullscreen)和使用浏览器自带的全屏快捷键F11区分开来,如下图:

图1:这是未进行任何全屏下的状态
这是未进行任何全屏下的状态

图2:这是使用h5全屏api(requestFullscreen)后的全屏
这是使用h5全屏api(requestFullscreen)后的全屏

图3:这是使用浏览器自带的全屏快捷键F11达到的全屏
这是使用浏览器自带的全屏快捷键F11达到的全屏
效果显而易见,按F11快捷键的全屏只是把浏览器地址栏给隐藏掉了而已,而h5的全屏api将“需要全屏的dom元素”给全屏了,这个时候就无需判断F11快捷键的全屏了,只需判断h5全屏的属性(fullscreenElement)即可,代码如下:

  1. /** * [isFullscreen 判断浏览器是否全屏] * @return [全屏则返回当前调用全屏的元素,不全屏返回false] */
  2. function isFullscreen(){
  3. return document.fullscreenElement ||
  4. document.msFullscreenElement ||
  5. document.mozFullScreenElement ||
  6. document.webkitFullscreenElement || false;
  7. }

第二种:整个页面被一个标签铺满,页面没有出现滚动条的全屏(通常是在做网页游戏),在这种情况下,使用h5全屏api(requestFullscreen)和使用浏览器自带的全屏快捷键F11达到的效果是一样的,如下图。
fullscreen
在这种情况下,全屏判断就得考虑是否是按了F11键全屏,此时,就不能使用h5的判断全屏的属性(fullscreenElement)去判断全屏了,此属性只在调用setFullscreen函数全屏时判断有效,而在使用浏览器“F11”全屏快捷键的时候无效,这个时候得根据浏览器可视区域与电脑屏幕大小做比较,来判断是否全屏,无论是setFullscreen函数还是按“F11”亲测有效。代码如下:

  1. function isFullscreenForNoScroll(){
  2. var explorer = window.navigator.userAgent.toLowerCase();
  3. if(explorer.indexOf('chrome')>0){
  4. //webkit
  5. if (document.body.scrollHeight === window.screen.height && document.body.scrollWidth === window.screen.width) {
  6. alert("全屏");
  7. } else {
  8. alert("不全屏");
  9. }
  10. }else{
  11. //IE 9+ fireFox
  12. if (window.outerHeight === window.screen.height && window.outerWidth === window.screen.width) {
  13. alert("全屏");
  14. } else {
  15. alert("不全屏");
  16. }
  17. }
  18. }

总结





















isFullscreen方法 有滚动条的页面 无滚动条的页面
Fullscreen api启动的全屏
按f11启动的全屏 × ×





















isFullscreenForNoScroll方法 有滚动条的页面 无滚动条的页面
Fullscreen api启动的全屏 ×
按f11启动的全屏 ×

√:方法有效;
×:方法无效;

TODO

目前还无法判断有滚动条按f11的全屏状态。

发表评论

表情:
评论列表 (有 0 条评论,294人围观)

还没有评论,来说两句吧...

相关阅读

    相关 h5 - File API

    File 1、作用:可以读取本地文件内容; 2、操作方式:通过<input type="file"> 或 通过拖拽来选择本地文件。 3、使用: 监听input的ch