Screen Orientation API 为 Web 应用提供了读取设备当前屏幕方向、旋转角度、锁定旋转方向、获取方向改变事件的能力。使得特定应用在屏幕方向方面加强用户体验,如视频和游戏。该标准目前处于工做组草案状态,最近一个修改成 1 月 29 日。javascript
Screen Orientation API 经过在 Screen
接口上扩展属性 orientation
为咱们提供该 API 的全部功能:java
partial interface Screen {
[SameObject] readonly attribute ScreenOrientation orientation;
};
复制代码
ScreenOrientation 的定义以下:web
[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
属性表明了以设备的天然位置开始,逆时针方向上所旋转的角度。如将手机逆时针旋转90度变为横屏,那么此时 angle
则返回 90 。async
type
属性主要经过描述来表达屏幕的旋转方向,type
的返回值总共有四个,对应着四个不一样的旋转方向:ui
portrait-primary
:竖屏状态而且旋转角度为 0 度,也就是设备的天然位置spa
portrait-secondary
:竖屏状而且即旋转角度为 180 度,也就是倒着拿的位置code
landscape-primary
:横屏状态而且旋转角度为 90 度cdn
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 支持得很好,能够考虑在你的下一个项目中使用。
简单的演示能够访问 codepen.io/NimitzDEV/p…