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

简介: <p>原文链接:http://www.sitepoint.com/use-html5-full-screen-api/</p> <p>       如果你不太喜欢变化太快的东西,那么web开发可能不适合你。我曾在2012年末有写过Full-Screen API的介绍,并且当时就提到其实现细节可能会被修改,但是没有想到一年后我需要重写!本篇的所讲的内容也许不是最新的,但是非常感谢David

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


相关文章
|
12天前
|
JSON API 数据格式
淘宝 / 天猫官方商品 / 订单订单 API 接口丨商品上传接口对接步骤
要对接淘宝/天猫官方商品或订单API,需先注册淘宝开放平台账号,创建应用获取App Key和App Secret。之后,详细阅读API文档,了解接口功能及权限要求,编写认证、构建请求、发送请求和处理响应的代码。最后,在沙箱环境中测试与调试,确保API调用的正确性和稳定性。
|
24天前
|
供应链 数据挖掘 API
电商API接口介绍——sku接口概述
商品SKU(Stock Keeping Unit)接口是电商API接口中的一种,专门用于获取商品的SKU信息。SKU是库存量单位,用于区分同一商品的不同规格、颜色、尺寸等属性。通过商品SKU接口,开发者可以获取商品的SKU列表、SKU属性、库存数量等详细信息。
|
25天前
|
JSON API 数据格式
店铺所有商品列表接口json数据格式示例(API接口)
当然,以下是一个示例的JSON数据格式,用于表示一个店铺所有商品列表的API接口响应
|
1月前
|
编解码 监控 API
直播源怎么调用api接口
调用直播源的API接口涉及开通服务、添加域名、获取API密钥、调用API接口、生成推流和拉流地址、配置直播源、开始直播、监控管理及停止直播等步骤。不同云服务平台的具体操作略有差异,但整体流程简单易懂。
|
15天前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
2月前
|
移动开发 前端开发 JavaScript
Twaver-HTML5基础学习(9)HTML节点(HTMLNode)
本文介绍了Twaver HTML5中的HTML节点(HTMLNode),这是一种专门用于呈现HTML元素的网元。文章解释了HTMLNode如何继承自Node并具有所有Node的特点,以及如何通过setName()方法将HTML元素作为网元的LabelAttachment或者AlarmAttachment呈现。示例代码展示了如何在React组件中创建HTMLNode并添加HTML元素,以及如何自定义告警显示样式。
23 1
Twaver-HTML5基础学习(9)HTML节点(HTMLNode)
|
1月前
|
人工智能 自然语言处理 PyTorch
Text2Video Huggingface Pipeline 文生视频接口和文生视频论文API
文生视频是AI领域热点,很多文生视频的大模型都是基于 Huggingface的 diffusers的text to video的pipeline来开发。国内外也有非常多的优秀产品如Runway AI、Pika AI 、可灵King AI、通义千问、智谱的文生视频模型等等。为了方便调用,这篇博客也尝试了使用 PyPI的text2video的python库的Wrapper类进行调用,下面会给大家介绍一下Huggingface Text to Video Pipeline的调用方式以及使用通用的text2video的python库调用方式。
|
1月前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
25天前
|
JSON 前端开发 JavaScript
API接口商品详情接口数据解析
商品详情接口通常用于提供特定商品的详细信息,这些信息比商品列表接口中的信息更加详细和全面。以下是一个示例的JSON数据格式,用于表示一个商品详情API接口的响应。这个示例假定API返回一个包含商品详细信息的对象。
|
1月前
|
JSON API 开发者
1688API商品详情接口如何获取
获取 1688 API 商品详情接口的步骤包括:1. 注册开发者账号;2. 了解接口规范和政策;3. 申请 API 权限;4. 获取 API 密钥;5. 实现接口调用(选择开发语言、发送 HTTP 请求);6. 处理响应数据。通过这些步骤,可以顺利调用 1688 的商品详情 API。
下一篇
无影云桌面