You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cordova Android锁定屏幕方向后无法获取正确屏幕尺寸的问题

解决屏幕方向锁定后无法立即获取正确尺寸的问题

我之前也踩过这个坑!问题的核心是:screen.orientation.lock()的then()回调只是告诉你锁定请求成功了,但此时浏览器还没完成实际的屏幕布局重排,window.screen的尺寸还是缓存的旧值,得等浏览器把方向切换的布局操作做完才能拿到正确数值。

这里给你两个靠谱的解决方案:

方案1:监听方向/尺寸变化事件

屏幕锁定方向后,浏览器会触发orientationchange和resize事件,我们可以在这些事件的回调里读取最新尺寸:

console.log(window.screen.width); // 初始值450
screen.orientation.lock('landscape').then(() => {
    const getUpdatedSize = () => {
        console.log(window.screen.width); // 此时会是正确的640
        // 记得移除监听,避免后续重复触发
        window.removeEventListener('orientationchange', getUpdatedSize);
        window.removeEventListener('resize', getUpdatedSize);
    };

    // 同时监听两个事件,确保覆盖所有浏览器的触发逻辑
    window.addEventListener('orientationchange', getUpdatedSize);
    window.addEventListener('resize', getUpdatedSize);
});

方案2:用requestAnimationFrame等待布局更新

如果觉得事件监听有点繁琐,可以用requestAnimationFrame——它会在浏览器完成下一帧渲染(也就是布局更新后)执行回调:

console.log(window.screen.width); // 初始值450
screen.orientation.lock('landscape').then(() => {
    // 等待下一帧渲染完成
    requestAnimationFrame(() => {
        console.log(window.screen.width); // 正确的640
    });
});

注:极少数场景下可能需要嵌套两次requestAnimationFrame,如果一次不行可以试试,但90%以上的情况一次就足够了。

本质上两种方法都是在等浏览器完成方向切换的布局流程,避免在锁定请求刚成功就急着读尺寸——那时候布局还没跟上呢!

内容的提问来源于stack exchange,提问作者Brian Mayo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:27:44