HTML5: Screen Orientation API

媒体查询允许网站根据智能手机和平板的方向来调整布局。但有时候你希网站锁定到一个特定的方向,横屏或竖屏,此时,原生应用的格式是可以被指定的。APP只在预设格式下显示—独立于实际的设备方向。通过使用HTML5的 Screen Orientation API, 可以在JavaScript定义屏幕方向。

为一个文档定义屏幕方向

通过screen.orientation属性的lock()方法可以调整屏幕方向,其默认值是any,这允许设备根据其物理方向来应用任何方向。值”natural”将在设备的自然方向上显示网站,因设备而异。智能手机通常使用横屏,平板则使用竖屏。

screen.orientation.lock("natural");

上面的示例中,为设备设置自然方向。

当然,Screen Orientation API也允许你定义一个独立的方向,其有四个值可以选择,这已经包含了移动设备所有可能的方向。这四个值分别是: “portrait-primary”, “portrait-secondary”, “landscape-primary”和 “landscape-secondary”。

上图显示了所有四个值的方向: “portrait-primary”, “portrait-secondary”, “landscape-primary”和 “landscape-secondary”。

对于智能手机,值portrait-primary和值natural是一样的,并等同于默认方向。值portrait-secondary将横屏模式旋转180°,所以设置成设别的自然模式时,网站看起来几乎时颠倒的。

screen.orientation.lock("portrait-primary");

同样,landscape-secondary和landscape-primary不同之处是前者将屏幕旋转了180°。

你也可以不用secondary和primary,仅适用landscape和portrait作为关键字,这将允许设备在两种方向模(portrait-primaryportrait-secondarylandscape-primarylandscape-secondary)式下显示。

如果想删除定义的方向,可以调用unlock()方法。

screen.orientation.unlock();

仅用于全屏模式

通过screen.orientation定义屏幕的方向有两个要求,第一:lock()方法仅在浏览器已经通过requestFullscreen()切换到全屏模式时起作用;第二:和第一点相关,由于全屏模式需要用户的许可,而不是自动切换,这同样适用于Screen Orientation API。

因此,对于点击事件,应该绑定这两种方法。

document.getElementById("button").addEventListener("click", function() {
  document.documentElement.requestFullScreen();
  screen.orientation.lock("portrait-primary");

 }, false);

调用lock()方法之前开启全屏模式是非常重要的,正如上面的例子。结束全屏模式将释放锁定的方向。

如果你在浏览器中打开了一个新文档,例如,当点击一个链接时,定义的方向将随着全屏模式同时结束。Screen Orientation API仅对当前文档有效。

读取Orientation

不能总是预先确定方向,有时你仅想知道智能手机和平板的方向。这种情况下,可以使用Screen Orientation API读取方向,类型属性值是显示定位的关键字之一。

alert(screen.orientation.type);

使用angle属性还可以显示方向的角度

alert(screen.orientation.angle);

角度为0等同于自然方向,大部分智能手机的自然方向是portrait-primary;90°等同于landscape-primary;180°等同portrait-secondary;270°等同landscape-secondary。不同的设备,angle代表不同的关键字。

为了获取方向值,浏览器需要运行在全屏模式下。

通过change事件改变屏幕方向也是可以的,只需要调用addEventListener()为orientation属性注册change事件并添加一个函数(作为事件处理程序)。

screen.orientation.addEventListener("change", function(e) {
  alert(screen.orientation.type + " " + screen.orientation.angle);
}, false);

每一次屏幕方向的改变都会触发弹框,显示当前的方向关键字和角度。

浏览器支持

Screen Orientation API在Chrome 38+ and Opera 25+不需要私有前缀,但 API仅能在移动设备上起作用。你可以使用一个if语句判断浏览器是否支持API

if ("orientation" in screen) {
  …
}

Screen Orientation API是很新的API,API的早期发展阶段使用不同的方法名。例如:使用lockOrientation()而不是lock(),使用unlockOrientation()而不是unlock(),不应该在Chrome and Opera使用这些旧的方法名。

IE 11+和Firefox 33+也支持Screen Orientation API,但需要对应的私有前缀

screen.msLockOrientation.lock("portrait-primary");
screen.mozLockOrientation.lock("portrait-primary");

在IE 11+和Firefox 33+中,检测方向变化的事件名也不同,你应该使用带对应前缀的orientationchange,而不是change.

当使用Screen Orientation API时,还需要记住一件事:由于要Fullscreen API一起使用才能起作用,所以不应该使用它来设计网站之类的。对于需要全屏模式的浏览器游戏或其他应用程序,它能有更好的效果。

译文出处:http://www.ido321.com/1572.html

本文根据@Denis Potschien的《HTML5: Screen Orientation API Uses Javascript to Rotate the Screen》所译,整个译文带有我自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://www.noupe.com/design/html5-screen-orientation-api-uses-javascript-to-rotate-the-screen-89639.html

时间: 2025-01-08 16:07:15

HTML5: Screen Orientation API的相关文章

HTML5程序设计 Canvas API

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

HTML5 文件拖放API讲解

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

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

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

App/Activity/Screen Orientation

测试android屏幕方向的小Demo 1.首先我们在values下面新建文件arrays.xml(用来在下拉列表中显示) <?xml version="1.0" encoding="utf-8"?> <resources> <!-- Used in app/Screen Orientation --> <string-array name="screen_orientations" <item&g

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

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

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

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

使用HTML5的History API

HTML5 History API提供了一种功能,能让开发人员在不刷新整个页面的情况下修改站点的URL.这个功能很有用,例如通过一段JavaScript代码局部加载页面的内容,你希望通过改变当前页面的URL来反应出页面内容的变化,这时该功能可以派上用场. 举个例子,当用户从首页进入帮助页面时,我们通过Ajax来加载帮助页面的内容.然后这个用户又转到产品页面,我们需要再一次通过Ajax请求来替换页面的内容.当用户想分享页面的URL时,通过History API,我们可以改变页面的URL来反应内容的

[转载] HTML5 文件操作API——HTML5系列

简介 我常常想,如果网络应用能够读取和写入文件与目录,将会非常方便.从离线转移到在线后,应用变得更加复杂,而文件系统方面的API的缺乏也一直阻碍着网络前进.存储二进制数据或与其进行交互不应局限于桌面.令人欣慰的是,由于FileSystemAPI的出现,这一现状终于得到了改变.有了FileSystemAPI,网络应用就可以创建.读取.导航用户本地文件系统中的沙盒部分以及向其中写入数据. API 被分为以下不同的主题: 读取和处理文件:File/Blob.FileList.FileReader 创建

有关html5的history api

从Ajax翻页的问题说起 请想象你正在看一个视频下面的评论,在翻到十几页的时候,你发现一个写得稍长,但非常有趣的评论.正当你想要停下滚轮细看的时候,手残按到了F5.然后,页面刷新了,评论又回到了第一页,所以你又要重新翻一次. 再或者,你想把这个评论发给别人分享,一面给了别人页面地址(为什么不直接复制呢?因为要连带视频等场景啊),一面又要加一句嘱咐:请翻到下面评论的第XX页的XX楼. 这就是问题.试想一下,如果浏览器能记住你当前的状态(比如看到了第十几页),而不是一刷新就还原,是不是就显得智能多了