Javascript 触发方向更改事件时获取错误的屏幕高度

Javascript 触发方向更改事件时获取错误的屏幕高度,javascript,mobile,Javascript,Mobile,当我将手机屏幕旋转到纵向或横向时,我编写了下面的代码来检查手机屏幕的高度 window.addEventListener("orientationchange", function(event) { rotateScreen(); }, false); function rotateScreen() { alert(window.orientation) alert($(window).height()) } 当我把它旋转到纵向时,我得到了0294。当我把它旋转到横向时,我得到9

当我将手机屏幕旋转到
纵向
横向
时,我编写了下面的代码来检查手机屏幕的高度

window.addEventListener("orientationchange", function(event) {
  rotateScreen();
}, false);

function rotateScreen() {
  alert(window.orientation)
  alert($(window).height())
}
当我把它旋转到
纵向时,我得到了0294。当我把它旋转到
横向时,我得到90419。该图是相反的,我试图用
$(document.ready()
将其包装起来,但它不起作用

$(document).ready(function(){
  alert($(window).height())
})
看起来,当我将手机旋转到
纵向
时,我得到了
横向
的高度,当我将手机旋转到
横向
时,我得到了
纵向
的高度。有人能建议如何修理它吗


谢谢添加setTimeout可以解决此问题,请尝试以下代码:

function rotateScreen() {
    window.setTimeout(function() {
       alert(window.orientation)
       alert($(window).height())
    }, 500);

}

方向更改事件后会触发调整大小事件。但是,调整大小也可以由其他事情触发,例如显示虚拟键盘

因此,为了解决这个问题,我们可以先听一个方向更改,一旦发生,我们可以添加一个调整大小的侦听器。一旦方向更改完成,它将触发我们的调整大小事件。完成后,我们将删除resize侦听器,以防止错误触发它

$(window).on('orientationchange', function() {
    var orientationChange = function(evt) {
        rotateScreen();
        $(window).off('resize', orientationChange);
    }
    $(window).on('resize', orientationChange);
});

这实际上创建了一种伪post:orientationChange事件。(如果可以,我可能会避免使用超时)

此代码的效果如何?我也遇到了同样的问题。有人找到了解决方法吗?@Dan Kanze请尝试下面我的答案。我相信这是一个廉价的黑客,你不能保证它会发生。当速度更快时,它也会显得很慢。Andy Polhill的答案是一个更好的解决方案,因为它保证了两者在正确的时间。@DominicWatson Andy解决方案的问题是,它在调整大小动画结束之前触发(并在iOS和Android上显示浏览器地址栏),因此它提供了比预期更大的内部高度。为此添加逻辑即使不比超时更糟糕,也同样麻烦。