javascript 中监听屏幕方向变化应优先使用 screen orientation api 的 screen.orientation.change 事件,兼容性方案为降级监听 window.orientationchange 并结合宽高比判断,注意权限限制和浏览器兼容性差异。

JavaScript 中没有直接叫 screenOrientation 的监听机制,真正可用的是 Screen Orientation API,它提供 orientationchange 事件和 screen.orientation 对象来响应横竖屏切换。
监听 orientationchange 事件(兼容性较好)
这是最常用、兼容性较广的方式(Chrome、Firefox、Safari iOS 12.2+ 支持),监听 window 的 orientationchange 事件:
- 该事件在设备方向变化时触发(如从竖屏转为横屏),但不保证 orientation 属性已更新完成,建议配合
setTimeout或直接读取window.orientation(已废弃但仍有支持)或更推荐用screen.orientation.angle - 注意:
window.orientation返回的是角度值(0/90/-90/180),但已被废弃,仅作降级参考;现代写法应优先使用screen.orientation
使用 screen.orientation API(现代标准)
screen.orientation 是 W3C 标准 API,提供 angle 和 type 属性,并支持 change 事件:
-
screen.orientation.type返回字符串,如"portrait-primary"、"landscape-secondary"等 -
screen.orientation.angle返回当前旋转角度(0、90、180、270) - 监听方式:
screen.orientation.addEventListener('change', handler) - ⚠️ 注意:部分 Android 浏览器(尤其旧版 Chrome)可能不触发
change事件,或需用户手势后才启用 API(出于安全策略)
实际可用的兼容写法(推荐)
结合两种方式,兼顾兼容性和可靠性:
- 先尝试监听
screen.orientation.change,成功则用screen.orientation.type判断方向 - 降级监听
window.orientationchange,再通过window.innerWidth > window.innerHeight粗略判断横竖屏(简单可靠,无需权限) - 避免依赖
window.orientation,因它在桌面端无意义,且在新版 Safari/Chrome 中已移除
注意权限与限制
某些浏览器(如 Chrome on Android)要求页面处于全屏或由用户手势触发后,screen.orientation 才完全可用;自动锁定方向需调用 screen.orientation.lock()(需用户交互后才能调用)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











