How to Use HTML5 FUll Screen API(如何使用HTML5全屏接口)

原文链接:http://www.sitepoint.com/use-html5-full-screen-api/

如果你不太喜欢变化太快的东西,那么web开发可能不适合你。我曾在2012年末有写过Full-Screen API的介绍,并且当时就提到其实现细节可能会被修改,但是没有想到一年后我需要重写!本篇的所讲的内容也许不是最新的,但是非常感谢David Storey帮我重点归纳出近期技术方面的变化....

什么是Full-Screen API?

此API可以使单个元素全屏显示。与按下F11键强制浏览器全屏不同,此API的目标是运行在一个容器中的图片,视频和游戏。当进入全屏模式时,将会出现一条信息通知用户可在任何时候按ESC键而返回页面。

现在主流的桌面浏览器(包括IE11)都支持此Full-Screen API。移动设备上有少部分支持,但是这些浏览器基本上都是全屏显示的。很不幸在不同浏览器上的不同细微表现有待我们去解决...

The JavaScript API

假设我们有一个ID为myimage的image,并且我们将让它全屏显示。那么需要用到的属性和方法有:

document.fullscreenEnabled(已改变)

如果document允许全屏模式,则此属性返回true。它可以用来检测浏览器是否支持全屏模式:

    if(document.fullscreenEnabled){....}

之前的实现中“Screen”的“S”是大写的,并且FireFox仍需要大写。添加前缀的结果就是产生一大段跨浏览器代码:

//full-sreen available
if(
   document.fullscreenEnable||
   document.webkitFullscreenEnabled||
   document.mozFullScreenEnabled||
   document.msFullscreenEnabled
){
...
}

Opera 12是唯一一个不需要前缀的,除了Opera15+使用webkit.

element.requestFullscreen()(已改变)

此方法可让单独的element全屏,例如:

document.getElementById(“myimage").requestFullscreen();

同样的,"screen"中的"s"变成称过了小写的了。下面是跨浏览器代码:

var i = document.getElementById("myimage");

// go full-screen
if (i.requestFullscreen) {
    i.requestFullscreen();
} else if (i.webkitRequestFullscreen) {
    i.webkitRequestFullscreen();
} else if (i.mozRequestFullScreen) {
    i.mozRequestFullScreen();
} else if (i.msRequestFullscreen) {
    i.msRequestFullscreen();
}

document.fullscreenElement()(已改变)

此属性返回的是当前为全屏显示的element,当不是全屏时则返回null:

if (document.fullscreenElement) { ... }

"screen"现在是小写的了。跨浏览器代码如下:

// are we full-screen?
if (
    document.fullscreenElement ||
    document.webkitFullscreenElement ||
    document.mozFullScreenElement ||
    document.msFullscreenElement
) {
...
}

document.exitFullsreen(已改变)

此方法用于取消全屏模式:

document.exitFullscreen;

同样的,”screen"又变成小写的了,之前为cancelFullScreen,fireFox仍使用它。跨浏览器代码如下:

// exit full-screen
if (document.exitFullscreen) {
    document.exitFullscreen();
} else if (document.webkitExitFullscreen) {
    document.webkitExitFullscreen();
} else if (document.mozCancelFullScreen) {
    document.mozCancelFullScreen();
} else if (document.msExitFullscreen) {
    document.msExitFullscreen();
}

document.fullscreenchange 事件

当进入或者退出全屏模式时将触发这个事件。此事件不提供任何的信息,但是你可以通过document.fullscreenElement是否为null来判断是否可以全屏。

document.addEventListener("fullscreenchange", function() { ... });

这个名字没有改变,但是我们还需要跨平台的前缀和IE的驼峰前缀:

document.addEventListener("fullscreenchange", FShandler);
document.addEventListener("webkitfullscreenchange", FShandler);
document.addEventListener("mozfullscreenchange", FShandler);
document.addEventListener("MSFullscreenChange", FShandler);

document.fullscreenerror 事件

全屏操作可能会失败。例如iframes没有allowfullscreen属性或者是以窗口形式显示的内容也许会引起冲突。因此一个fullscreenerror也许会被触发:

document.addEventListener("fullscreenerror", function() { ... });

这个名字没有改变,但是我们还需要跨平台的前缀和IE的驼峰前缀:

document.addEventListener("fullscreenerror", FSerrorhandler);
document.addEventListener("webkitfullscreenerror", FSerrorhandler);
document.addEventListener("mozfullscreenerror", FSerrorhandler);
document.addEventListener("MSFullscreenError", FSerrorhandler);

FUll-Screen CSS

我们也可以在CSS样式中影响全屏...

:fullscreen (pseudo class)伪类(已改变)

你可以将此样式应用到一个一个element或者它的孩子,当它们在全屏模式下显示时才有效:

:fullscreen {
    ...
}

之前的名字为:full-sreen,并且Webkit和fireFox仍让使用它。跨浏览器代码如下:

:-webkit-full-screen {
}

:-moz-full-screen {
}

:-ms-fullscreen {
}

:fullscreen {
}

::backdrop(新增)

你可以将颜色和图片背景应用到全屏模式不同分辨率显示下的元素中:

:fullscreen::backdrop {
    background-color: #006; /* dark blue */
}

backdrop是在fullsreen元素后面的伪元素,但是是其他页面上的内容。IE11提供了支持,但那时firefox和Opera12没有.CHrome,Safari和Opera15+包含了backdrop元素,但是不允许给它样式。目前,你可以只面向IE11,如:

:-ms-fullscreen::-ms-backdrop {
    background-color: #006; /* dark blue */
}

样式差异

在IE11,firefox和Opera12中full-sreen元素被设置成100%宽和高。因此Imagey将会被拉伸,而忽视它的高宽比。在IE11中设置高和宽使全屏元素置于左上角,和一个黑色的背景(::backdrop中配置的)。Opera12和IE11相似,但是背景是透明的。Firefox忽视它的尺寸。在Chrome,Safari和Opera15+中全屏元素置于一个黑色背景的中央。

如果你想保持一致性,可以使Webkit/Blink 浏览器伸缩至Firefox/IE11那样:

:-webkit-full-screen {
    position: fixed;
    width: 100%;
    top: 0;
    background: none;
}

你也可以让IE11像Webkit/blink那样,使全屏元素置于中央:

:-ms-fullscreen {
  width: auto;
  height: auto;
  margin: auto;
}

此方法不适用于Firefox,因为它忽视width和height,之前提到过。解决的办法就是,你需要让此元素的父元素全屏并应用于适当的尺寸,如:shown
in this demonstration
.

Ready for Deployment?

HTML5 Full-Sreen API相对比较简单,但是浏览器的差异性导致很丑的代码,并且不能保证它们不会再改变。这种情况会得到改善,所以最好是把大部分时间和精力投入到其他功能和特性上,直到此API变成更稳定些。

这就是说,full-sreen可以用于HTML5游戏和视频网站。如果你不想自己维护代码,你可以使用screenfull.js 这样的类库,它可以平滑过渡这些差异,Beast
of Luck!

转载请注明:来至微个日光日

前端技术交流群:139761568

时间: 2024-12-13 16:56:34

How to Use HTML5 FUll Screen API(如何使用HTML5全屏接口)的相关文章

How to Use HTML5 FUll Screen API(怎样使用HTML5全屏接口)

原文链接:http://www.sitepoint.com/use-html5-full-screen-api/ 假设你不太喜欢变化太快的东西,那么web开发可能不适合你. 我曾在2012年末有写过Full-Screen API的介绍,而且当时就提到事实上现细节可能会被改动,可是没有想到一年后我须要重写!本篇的所讲的内容或许不是最新的.可是很感谢David Storey帮我重点归纳出最近技术方面的变化.... 什么是Full-Screen API? 此API能够使单个元素全屏显示. 与按下F11

HTML5全屏浏览器兼容方案

最近一个项目有页面全屏的的需求,搜索了下有HTML5的全屏API可用,不过各浏览器的支持不一样. 标准 webkit  Firefox  IE Element.requestFullscreen() webkitRequestFullscreen mozRequestFullScreen msRequestFullscreen Document.exitFullscreen() webkitExitFullscreen mozCancelFullScreen msExitFullscreen D

HTML5程序设计 Canvas API

检测浏览器支持情况 <script type="text/javascript"> try { document.createElement("Canvas").getContext("2d"); document.getElementById("support").innerHTML = "OK"; } catch (e) { document.getElementById("sup

HTML5项目笔记6:使用HTML5 FileSystem API设计离线文件存储

在移动环境或者离线环境中,WebDataBase 虽然能够存储并有效地管理和维护客户端的数据集合,但是仍不能满足对包含大段数据文件的存储和多种不同格式文件的保存,于是我们就需要离线的文件管理系统来维护我们工作了,基于HTML5的FileSystem API 就充当这这个角色. 通过这个FileSystem API,我们的Web应用程序可以阅读,浏览,编辑和操纵本地文件系统. FileSystem API的主要功能有: Reading and manipulating files: File/Bl

HTML5 文件拖放API讲解

本章向大家讲解一下HTML 5中文件API与拖放API的使用方法.HTML5的文件API,可以在浏览器中直接显示客户端文件的信息或文件中的内容,而通过拖放API,可以直接将位于客户端中的文件拖动到浏览器中,也可以单独拖动页面中的元素或者元素中的内容. HTML5拖拽文件预览效果图: 在线演示 以前,我们使用file控件,单击上传按钮后选择计算机中的文件.在HTML5中,我们可以先将计算机中的文件直接拖动到浏览器中进行预览,确定文件是我们所需要的,然后单击上传按钮将该文件上传到服务器端. 我们使用

HTML5实现全屏API【进入和退出全屏】

现在主流浏览器基本上实现了全屏效果,但是不同浏览器实现不一样: [进入和退出全屏] // Webkit (works in Safari5.1 and Chrome 15)element.webkitRequestFullScreen();document.webkitCancelFullScreen(); // Firefox 10+element.mozRequestFullScreen();document.mozCancelFullScreen(); // W3C 提议element.r

用HTML5的File API做上传图片预览功能

用HTML5的File API做上传图片预览功能 前几天做了一个项目,涉及到上传本地图片的功能,正好之前了解过 html5 可以上传本地图片,然后再网上看了一些demo结合自己的需求,终于搞定了.(PS : 不得不承认我这个人有多懒,没有需求的时候我向来不主动去学习).移动端完全支持哦!已测试. 下面给大家看看代码吧怎么实现的 第一:HTLM部分(这里不去做漂亮的样式了我们注重学习功能) <input type="file" id="fileElem" mul

HTML5: History API 无刷新更改地址栏

HTML5 新增的历史记录 API 可以实现无刷新更改地址栏链接,配合 AJAX 可以做到无刷新跳转. 简单来说:假设当前页面为renfei.org/,那么执行下面的 JavaScript 语句: window.history.pushState(null, null, "/profile/"); 之后,地址栏的地址就会变成renfei.org/profile/,但同时浏览器不会刷新页面,甚至不会检测目标页面是否存在. 应用:全站 AJAX,并使浏览器能够抓取 AJAX 页面 这个可以

HTML5实战与剖析之使用HTML5 WebSocket API

通过引入一个简洁的接口(见下面的清单),开发者可以替代技术,如长轮询和"永远帧,因此进一步降低延迟. 后台代码 [Constructor(in DOMString url, optional in DOMString protocol)] [构造函数(DOMString url,可选DOMString协议)] interface WebSocket { //readonly attribute DOMString URL; //只读的属性DOMString URL; // ready state