原文链接: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

How to Use HTML5 FUll Screen API(怎样使用HTML5全屏接口)的更多相关文章

  1. How to Use HTML5 FUll Screen API(如何使用HTML5全屏接口) 【精】

    原文链接:http://www.sitepoint.com/use-html5-full-screen-api/ 如果你不太喜欢变化太快的东西,那么web开发可能不适合你.我曾在2012年末有写过Fu ...

  2. 【html5】 解决 video标签 不自动全屏

    <video controls="controls" poster='' src='' preload="auto" x5-playsinline=&qu ...

  3. HTML5 <Audio>标签API整理(三)

    一.浏览器支持 Internet Explorer 9+, Firefox, Opera, Chrome, 和 Safari 都支持 <audio> 元素. 注意: Internet Ex ...

  4. HTML5实现全屏

    现在主流的浏览器都支持全屏,但是各家实现不一.下面是主流浏览器实现方法: // W3C 提议 element.requestFullscreen(); element.exitFullscreen() ...

  5. HTML5全屏浏览器兼容方案

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

  6. 从零开始学 Web 之 HTML5(三)网络监听,全屏,文件读取,地理定位接口,应用程序缓存

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  7. h5的api dom全屏展示

    下面是完整的例子,暂不做分析 <!DOCTYPE html> <html> <head> <title> FullScreen API 演示</t ...

  8. 【小月博客】用HTML5的File API做上传图片预览功能

    前段时间做了一个项目,涉及到上传本地图片以及预览的功能,正好之前了解过 html5(点击查看更多关于web前端的有关资源) 可以上传本地图片,然后再网上看了一些demo结合自己的需求,终于搞定了.(P ...

  9. HTML5 <Audio/>标签Api整理(二)

    1.实例2: 相对较完整 Html代码: <style> #volumeSlider .slider-selection { background:#bababa; } </styl ...

随机推荐

  1. win2008通过计划任务定时执行bat文件

    前段时间在Windows Server 2008安装了一套基于MySQL数据库的软件,处于数据安全的考虑,希望每天能够自动进行数据库备份.我在别人脚本的基础上自己写了一个数据库备份的bat脚本,双击该 ...

  2. C# 查看本机安装的NET Framework 版本

    https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/how-to-determine-which-versions-ar ...

  3. HDU 6240 Server(2017 CCPC哈尔滨站 K题,01分数规划 + 树状数组优化DP)

    题目链接  2017 CCPC Harbin Problem K 题意  给定若干物品,每个物品可以覆盖一个区间.现在要覆盖区间$[1, t]$. 求选出来的物品的$\frac{∑a_{i}}{∑b_ ...

  4. Xamarin XAML语言教程使用Progress属性数据绑定设置进度条进度

    Xamarin XAML语言教程使用Progress属性数据绑定设置进度条进度 开发者除了可以为ProgressBar定义的Progress属性直接赋双精度类型的值外,还可以通过数据绑定的方式为该属性 ...

  5. viewport 测试以及总结

    这里的总结的主要思想是ppk的文章(文末附有链接),加入了自己的总结,下面的测试用的是iphone5s,android是安卓5.5吋的手机,只是为了直观感受和方便解释拿了空出来的测试机给出的数据.详细 ...

  6. POJ3345 Bribing FIPA(树形DP)

    题意:有n个国家,贿赂它们都需要一定的代价,一个国家被贿赂了从属这个国家的国家也相当于被贿赂了,问贿赂至少k个国家的最少代价. 这些国家的从属关系形成一个森林,加个超级根连接,就是一棵树了,考虑用DP ...

  7. linux-系统资源查看-动态

    1.top 2.sar http://blog.csdn.net/hguisu/article/details/7493661  很重要 http://blog.itpub.net/24435147/ ...

  8. Debian下载地址

    http://cdimage.debian.org/cdimage/archive/

  9. 【spring data jpa】spring data jpa的in查询

    如下: List<Dealer> findDealersByTidAndUidIn(String tid,List<String> uidList); 在dao层里面直接写这个 ...

  10. 【Linux】CentOS7上安装搜狗输入法

    找到一篇资料,提供安装搜狗输入法的方法,在http://www.cnblogs.com/Yiutto/p/6204085.html[也是本文的参考原地址] 请大家自行下载fcitx.tar.gz 1. ...