【问题标题】:Cordova: How to get width and height of app?Cordova:如何获取应用程序的宽度和高度?
【发布时间】:2016-01-13 18:35:08
【问题描述】:

我需要使用 JavaScript 为我的 cordova android 应用程序获取窗口的宽度和高度。

我尝试过来自 JQuery 库的$(window).width() and $(window).height(),但结果是喜怒无常:

我在 Nexus 7 上进行测试,当我以纵向模式打开应用程序时,我得到宽度 = 600,高度 = 888。

当我将设备旋转到横向并重新计算它们应该交换时它们不会改变的尺寸,当我将设备旋转回纵向时,我得到宽度 = 960,高度 = 528。

我对这个输出感到非常困惑,这让我觉得我使用了错误的代码。非常感谢您的帮助或建议。

这里是获取屏幕尺寸的函数:

function getDimensions() {
    //Gets height and width of web browser
    var height = $(window).height(); 
    var width = $(window).width();

    //Stores dimensions in array of form [width,height] 
    var dimensions = [width,height];

    return dimensions;
}

这是我在旋转后检查尺寸的地方:

function onOrientationChange() {
    var dimensions = getDimensions();
    console.log("rotation width " + dimensions[0] + " height " + dimensions[1]);
}

【问题讨论】:

  • 你能发布你的代码吗?
  • 我已编辑以包含我的 getDimensions() 函数
  • 听起来您正在计算重绘出现之前的宽度和高度,从而导致旋转前窗口的宽度和高度。您如何检测旋转后的窗口重绘? 编辑:你有没有尝试在回调中使用 setTimeout 在方向事件发生后进行检查?
  • 嗯...看起来还可以。我还在我的科尔多瓦应用程序中使用$(window) 来获取高度和宽度。你在哪里调用 getDimensions?

标签: javascript android jquery cordova


【解决方案1】:

尝试: var w = window.innerWidth; var h = window.innerHeight; 我知道这适用于网络浏览器

【讨论】:

    【解决方案2】:

    您必须使用orientationchange 事件

    orientationchange 事件在设备的方向改变时触发。

    Window.orientation 属性包含一个代表当前方向的数字(查看下图了解更多详情)。

    注意!:window.orientation 在桌面浏览器中返回 undefined。所以请在模拟器或设备上进行测试。

    解决方法:

    1. orientationchange 事件附加到全局窗口对象。
    2. 检查方向值并在里面做一些逻辑。

    window.addEventListener("orientationchange", orientationChange);
    
    function orientationChange() {
      switch (window.screen.orientation) {
        case "landscape-primary":
          //your function over here: getDimensions();
          break;
        case "portrait-primary":
          //your function over here: getDimensions();
          break;
        default:
          break;
      }
    }

    【讨论】:

    • 我对设备方向不感兴趣。我只想知道尺寸。
    • 你写了这个“当我将设备旋转到横向并重新计算它们应该交换时它们不会改变的尺寸,当我将设备旋转回纵向时,我得到宽度 = 960,高度 = 528。”
    • 你必须检查每个方向变化的尺寸以获得正确的值
    • 我尝试运行您的代码,但它在 'switch(e.orientation)' 行上抛出了一个错误——“无法读取未定义的属性 'orientation'。”
    • 我用window.screen.orientation替换了它,你也可以试试。您是否将 Croswalk 绑定到您的应用程序中?
    猜你喜欢
    • 1970-01-01
    • 2015-08-03
    • 2011-07-12
    • 2014-05-01
    • 1970-01-01
    • 2019-12-26
    • 2011-09-25
    • 2012-10-10
    • 2014-07-27
    相关资源
    最近更新 更多