2

我需要在orientationchange 上计算屏幕宽度。

我这样做是这样的:

$(window).on('orientationchange', function(event){
   $(this).panelWidth("orientationchange")
   });

panelWidth: function (fromWhere) {
   window.setTimeout(function () {
      var $wrapWidth = $('div:jqmData(wrapper="true").ui-page-active').innerWidth();
      console.log( $wrapWidth );
      },10);
   });

我已经在使用 10ms 延迟来计算屏幕宽度,但在 Android 上它仍然无法正常工作......

我的屏幕是 320x480。如果我从纵向开始并更改为横向,我会得到 320 像素。当我改回纵向时,我控制台 480px,所以宽度似乎总是在方向实际改变之前计算。

如果可能的话,我不想增加超时。还有哪些其他方法可以确保仅在 Android 完成“转动”屏幕时才计算 $wrapWidth?

感谢帮助!

编辑
来自 Jquery Mobile sourceode 的一些信息:

...as the actual screen resize takes place before or after the orientation 
change event has been fired depending on implementation (eg android 2.3 is 
before, iphone after). More testing is required to determine if a more reliable 
method of determining the new screensize is possible when orientationchange 
is fired. (eg, use media queries + element + opacity)
4

1 回答 1

6

这是框架 Android 设备中的错误。你可以做两件事。

  1. 据此,超时更改为 100 毫秒。显然它会解决问题。
  2. 由于在源发生更改之前触发的事件,请使用相反的宽度和高度值。像:

    $(window).bind('orientationchange', function(event){ if(event.orientation == 'portrait') { // 将页面更改为横向 } else if (event.orientation == 'landscape') { / / 改变你的肖像页面 }
    });

于 2012-04-16T13:14:15.903 回答