屏幕方向读取与锁定:Screen Orientation API(转)
什么是 Screen Orientation API
Screen Orientation API 为 Web 应用提供了读取设备当前屏幕方向、旋转角度、锁定旋转方向、获取方向改变事件的能力。使得特定应用在屏幕方向方面增强用户体验,如视频和游戏。该标准目前处于工作组草案状态,最近一个修改为 1 月 29 日。
浏览器支持情况

属性结构
Screen Orientation API 通过在 Screen 接口上扩展属性 orientation 为我们提供该 API 的所有功能:
partial interface Screen {
[SameObject] readonly attribute ScreenOrientation orientation;
};
复制代码
ScreenOrientation 的定义如下:
[Exposed=Window]
interface ScreenOrientation : EventTarget {
Promise<void> lock(OrientationLockType orientation);
void unlock();
readonly attribute OrientationType type;
readonly attribute unsigned short angle;
attribute EventHandler onchange;
};
复制代码
接下来我们就来解释如何使用与读取这些方法和属性。
读取屏幕方向
读取屏幕方向主要通过 type 和 angle 两个属性,前者返回旋转方向的描述,后者返回旋转的角度
angle
angle 属性代表了以设备的自然位置开始,逆时针方向上所旋转的角度。如将手机逆时针旋转90度变为横屏,那么此时 angle 则返回 90 。
type
type 属性主要通过描述来表达屏幕的旋转方向,type 的返回值总共有四个,对应着四个不同的旋转方向:
portrait-primary:竖屏状态并且旋转角度为 0 度,也就是设备的自然位置
portrait-secondary:竖屏状并且即旋转角度为 180 度,也就是倒着拿的位置
landscape-primary:横屏状态并且旋转角度为 90 度
landscape-secondary:横屏状态并且旋转角度为 180 度
锁定屏幕方向
出于一些安全方面的考虑,锁定方向时必须使页面处于全屏状态
锁定
锁定屏幕通过 lock 方法,调用 lock 方法需要传入锁定的方向描述字符串,随后该方法会返回一个 Promise。
| 描述字符串 | 功能 |
|---|---|
| portrait-primary | 竖屏主方向 |
| portrait-secondary | 竖屏次方向 |
| landscape-primary | 横屏主方向 |
| landscape-secondary | 横屏次方向 |
| portrait | 竖屏方向(primary + secondary) |
| landscape | 横屏方向(primary + secondary) |
| natural | 设备的自然方向 |
| any | 锁定四个方向,即锁定当前屏幕方向 |
Example:
async function lockPortrait() {
// 首先进入全屏模式
await document.documentElement.requestFullscreen();
// 锁定竖屏方向
await screen.orientation
.lock('portrait')
.catch(e => alert(e.message));
}
复制代码
解锁
解锁不需要额外参数,只需要调用 unlock 即可:
function unlock() {
screen.orientation.unlock();
}
复制代码
屏幕方向改变事件
通过为 onchange 赋值或通过 addEventListener 都可以添加事件监听:
function rotationChange() {
console.log('rotation changed to:', screen.orientation.type);
}
screen.orientation.addEventListener('change', rotationChange);
复制代码
小结
透过本文,其实要使用这个 API 并不困难,并且在某些场景下,我们还能直接通过 lock 方法改变屏幕的旋转方向,提升浏览体验。并且移动端上的 Chrome 和 FIrefox 支持得很好,可以考虑在你的下一个项目中使用。
文章来源:
屏幕方向读取与锁定:Screen Orientation API(转)的更多相关文章
- HTML5: Screen Orientation API
媒体的询问取决于智能手机和平板布局调整的方向一致网站.但有时候你被锁定在一个希腊网站特定方向.横向或纵向.此时,是本机格式可以指定保健应用. APP只显示在一个预设格式-独立于实际设备方向.通过使用H ...
- IONIC屏幕方向锁定
如果希望阻止app在设备旋转时发生横屏,可以使用这个插件: cordova plugin add cordova-plugin-screen-orientation // set to either ...
- setRequestedOrientation设置屏幕方向
void android.app.Activity.setRequestedOrientation(int requestedOrientation) 官方API解释: Change th ...
- android自适应屏幕方向和大小
一:不同的layout Android手机 屏幕 大小不一,有480x320, 640x360, 800x480.怎样才能让App自动 适应不同的屏幕 呢? 其实很简单,只需要在res目录下 ...
- Android中Activity运行时屏幕方向与显示方式详解
现在我们的手机一般都内置有方向感应器,手机屏幕会根据所处位置自动进行横竖屏切换(前提是未锁定屏幕方向).但有时我们的应用程序仅限在横屏或者竖屏状态下才可以运行,此时我们需要锁定该程序Activity运 ...
- iOS如何用代码控制以不同屏幕方向打开新页面?
转载:http://blogread.cn/it/article/7765?f=wb#original 代码示例:https://github.com/johnlui/Swift-On-iOS/tre ...
- UI: 概述, 启动屏幕, 屏幕方向
UI 设计概述 启动屏幕(闪屏) 屏幕方向 示例1.UI 设计概述UI/Summary.xaml <Page x:Class="Windows10.UI.Summary" x ...
- 背水一战 Windows 10 (2) - UI: 概述, 启动屏幕, 屏幕方向
[源码下载] 背水一战 Windows 10 (2) - UI: 概述, 启动屏幕, 屏幕方向 作者:webabcd 介绍背水一战 Windows 10 之 UI UI 设计概述 启动屏幕(闪屏) 屏 ...
- 详解Android中的屏幕方向
屏幕方向 是对Activity而言的,所以你可以在AndroidManifest.xml 文件中,通过<activity> 标记的screenOrientation 属性进行设定,例如: ...
随机推荐
- Promise介绍及使用场景
Promise 介绍 Promise 是一个构造函数,是异步编程的一种解决方案.所谓Promse,它本身就是一个容器,里面保存着异步操作的结果,对的,这和回调函数类似. Promise 容器本身不是异 ...
- js之预解析
一.所谓的预解析就是:在当前作用域中,JavaScript代码执行之前,浏览器首先会默认的把所有带var和function声明的变量进行提前的声明或者定义. 1)var声明的变量在预解析的时候只是提前 ...
- JavaScript 之 offset 、client、scroll
下面这三组是关于元素大小.位置相关的属性 一.offset 偏移量 1.offsetParent 该属性获取距离当前元素最近的定位父元素,如果没有定位父元素此时是 body 元素 2.offsetLe ...
- 面试题:什么叫2B树
在B树的基础上,每个节点有两个域,且他们是有顺序的,在层次上的又满足二叉排序树的性质
- ML- 核函数(Kernel) 的 SVM
Why 核函数 目的是为了解决线性不可分问题. 核心思想是升维. 当样本点在低维空间不能很好地分开的时候, 可以考虑将样本通过某种映射(就是左乘一个矩阵) 到高维空间中, 然后在高维空间就容易求解一个 ...
- HtmlAgilityPack - 详细简介和使用
HtmlAgilityPack - 简介 HtmlAgilityPack是.net下的一个HTML解析类库.支持用XPath来解析HTML.这个意义不小,为什么呢?因为对于页面上的元素的xpath某些 ...
- java 如何用pattern 和 Matcher 来使用正则表达式(一)
近期用到了java或者scala的正则表达式的用法,抽点时间总结一下: 转自:https://www.cnblogs.com/haodawang/p/5967219.html java的regex库 ...
- Linux正则表达式与通配符
在linux中,有通配符和正则表达式,这是两个不同的概念通配符:它是由shell解析,并且一般用于匹配文件名.如:ls正则表达式:是一个字符匹配标准,可以匹配文本中的内容一些命令工具按此标准实现字符匹 ...
- (10)树莓派 vim编辑器使用
进去后 1点击 insert 插入数据 2 ctrl+alt+c 粘贴内容 或者 手动敲入代码 3 ctrl+v 保存 4 :wq 保存退出 5 回车
- php面试题收藏
总结几个要素: 1.个人简介名字大写,内容需要详实,一是可以给人留下映像,二是减少不必要的与面试官交换个人信息的时间.准备一份好的口头自我介绍是很有必要的,毕竟准备一次能用很久,时间花在上面很实用,面 ...