window.innerHeight 与 window.outerHeight 计算密度?

2024-01-04

当我开始使用 PhoneGap(一个标尺)开发一个简单的应用程序时,我遇到了一个问题。我的大部分移动背景都是使用原生 Android,所以我就从它开始。我是 javascript 和 html5 以及一般 Web 开发的初学者。

Here https://stackoverflow.com/questions/12547716/how-to-draw-a-simple-ruler-with-javascript/12547974#12547974你可以看到我与该问题相关的第一个问题。

这是我第一次尝试计算一毫米中有多少个像素。这在 Android 本机代码中运行良好。

    public float getYdpi() {
        return displayMetrics.ydpi;
    }
function getPixelsPerMillimeter(){
    return YDpi/25.4f;        
}

但毫米标记画错了。最后经过一番尝试我更换了如下方法

 function getPixelsPerMillimeter(){
    var pixelsPerMms = window.innerHeight/heightInMms;
    return pixelsPerMms;    
}

HeightInMms 是在原生 Android 代码中计算的,简单的数学高度(以像素为单位)除以每英寸的密度像素,再乘以 25.4,即一英寸有多少毫米。

public float getPhoneHeightInMillimeters(){     
    metrics = gap.getResources().getDisplayMetrics();                   
    return (metrics.heightPixels     / metrics.ydpi)*25.4f;

长话短说,我从本机代码或使用 window.outerHeight 获得的 dpi(或每英寸像素,这是我的最终目标)与我从 window.innerHeight 获得的不同。为什么?

给出真实值,我正在 Galaxy s2 设备上进行测试,高度为 800px。 window.outerHeight 返回 800,如metrics.heightPixels,但 window.innerHeight 给我 533。为什么?


您可以创建一个宽度为 1 英寸的元素,然后询问该元素的 clientWidth(以像素为单位测量)

Example:

function getPixelsPerInch() {
  var d = document.createElement("div");
  var ret;
  d.style.opacity = 0;
  d.style.width = "1in";
  d.style.position = "fixed";
  d.style.padding = 0;
  document.body.appendChild(d);
  ret = d.clientWidth;
  document.body.removeChild(d);
  return ret; 
}
alert(getPixelsPerInch());

我建议避免进行单位计算并在可能的情况下在浏览器上进行转发,例如您可以计算每毫米像素数这边走:

function getPixelsPerMillimeter() {
  var d = document.createElement("div");
  var ret;
  d.style.opacity = 0;
  d.style.width = "1mm";
  d.style.position = "fixed";
  d.style.padding = 0;
  document.body.appendChild(d);
  ret = d.clientWidth;
  document.body.removeChild(d);
  return ret; 
}
alert(getPixelsPerMillimeter());

或者更通用的方法:

function getPixelsPer(unit) {
  var d = document.createElement("div");
  var ret;
  d.style.opacity = 0;
  d.style.width = unit;
  d.style.position = "fixed";
  d.style.padding = 0;
  document.body.appendChild(d);
  ret = d.clientWidth;
  document.body.removeChild(d);
  return ret; 
}
function getPixelsPerInch() {
  return getPixelsPer("1in");
}
function getPixelsPerMillimeter() {
  return getPixelsPer("1mm");
}
alert(getPixelsPerInch());
alert(getPixelsPerMillimeter());
alert(getPixelsPer("1cm")); // and so on...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

window.innerHeight 与 window.outerHeight 计算密度? 的相关文章

随机推荐

  • 如何从 Google Chrome 启用本地文件系统读写访问?

    我需要使用 HTML Javascript 代码从 Google Chrome 启用本地文件系统读 写访问 我正在使用存储在本地系统中的一组 html 页面 即 file c project1 page html 我目前的观察是 我们可以使
  • C++纯虚函数有函数体[重复]

    这个问题在这里已经有答案了 纯虚函数 当我们设置 0 也可以有一个函数体 如果纯虚函数根本不会被调用 那么为它们提供函数体有什么用呢 您认为无法调用纯虚函数的假设是绝对错误的 当一个函数被声明为纯虚函数时 它仅仅意味着该函数无法被调用动态地
  • 在哪里可以找到 Google Cloud 计算成本明细?

    我正在尝试 Google 云计算 它与 Microsoft Azure 完全不同 但我很难掌握它的窍门 例如 您在哪里可以找到相当于 Microsoft Azure 成本细目的 Google 云计算 请看这个截图 你就会知道我在说什么 微软
  • 检查大型矩阵 Matlab 中的重复条目

    我有一个非常大的矩阵 901x1801 它是通过组合三个相似数组 其中包含重复值 的值来生成的 以使用数学表达式生成唯一的代码 矩阵中充满了这些代码 我的问题是 我如何检查矩阵 901x1801 的每个值都是唯一的并且一次都不重复 或者 谁
  • D3.js 设置初始缩放级别

    我设置了几个图表来放大容器 效果很好 然而 在初始加载时 缩放级别太接近 有没有一种方法可以设置初始缩放级别以避免首先缩小 我熟悉 scale 方法 但没有运气实施它 这是要走的路还是我缺少什么 到目前为止 我所掌握的有关缩放的信息如下 v
  • SSIS 设计器运行速度非常慢

    我正在开发一个 SQL Server 集成服务包 我一直在对这个包进行一些重大重构 现在设计器运行得非常慢 即使在屏幕上移动组件也会导致设计人员停滞 2 3 分钟 查看任务管理器 Visual Studio 在此期间消耗了大约 80 的 C
  • 我可以查看由soap wcf 调用发出的原始请求吗

    我正在使用 WCF 向第三方服务发出 SOAP 请求 该服务要求我签署请求 我认为我正在这样做 但我收到错误 Could not create SSL TLS secure channel所以我想知道是否有办法查看正在发送的原始 xml 以
  • Laravel 4:保护控制器提供的路由

    我正在构建一个 Laravel 4 应用程序 我想保护我的管理区域 因此只有在用户登录 经过身份验证后才能访问它 做这个的最好方式是什么 Laravel 文档说你可以像这样保护路由 Route get profile array befor
  • android edittext 文本向右对齐,标签向左对齐

    我想要一个编辑文本 其中标签 名称 显示在编辑文本的左侧 并且从右到左输入输入 如果我将 android gravity 设置为 right 输入将从右到左 但在这种情况下 标签 即编辑文本的 android text 给出的任何内容 也会
  • 使用 Java 通过 Tensorflow Serving 进行推理

    我们正在将现有的 Java 生产代码转换为使用 Tensorflow Serving TFS 进行推理 我们已经重新训练了模型并使用新的 SavedModel 格式保存了它们 不再有冻结图表 从我读过的文档来看 TFS并不直接支持Java
  • 如何总结 XSL 中 for-each 循环的结果?

    我是 XSL 新手 所以我真的不知道如何做到这一点 我有一个 for each 语句 它对 单元格 类型的每个元素进行一些计算 如何汇总结果并将其存储在变量中以便显示它 我已经包含了部分代码 我希望有人知道这个问题的解决方案 感谢您的时间和
  • Google ndb 库中的内存泄漏

    我认为存在内存泄漏ndb图书馆 但我找不到在哪里 有没有办法避免下面描述的问题 您是否有更准确的测试想法来找出问题所在 这就是我重现问题的方式 我创建了一个包含 2 个文件的简约 Google App Engine 应用程序 app yam
  • 当特定条件为 true 时,Bash 替换字符串

    我正在尝试替换同一行中特定条件为真的字符串 我有一个包含一些行的文件 我在以另一个单词 word3 开头的每一行中用另一个单词 word2 替换一个单词 word1 例如 foo moo see kaa haa qee foo dee se
  • 查询 DBpedia 以获取图书的元数据

    我有一堆 ISBN 我要查询DBpedia并获取书籍的元数据 我无法理解SPARQL 有人可以告诉我如何获取一本书的元数据吗DBpedia在Java中 SPARQL 既是一种查询语言 也是一种查询所谓的协议SPARQL 端点 向 DBped
  • 从 Numpy 数组的索引中采样的有效方法?

    我想从 2D Numpy 数组的索引中进行采样 考虑到每个索引都按该数组内部的数字进行加权 我知道的方式是numpy random choice但是 这不会返回索引 而是返回数字本身 有什么有效的方法吗 这是我的代码 import nump
  • 我应该在 MVC Razor 中的哪里找到共享 @helper 函数

    我有一个辅助功能 可以将分钟变成小时 分钟 我目前在我的layout cshtml 中有它 但每个页面都看不到该功能 我应该将辅助函数放在哪里以便每个页面都可以看到它 helper DisplayElapsedTime int timeIn
  • 使用AWS Codebuild时如何读取SSM参数?

    我目前正在成功使用 codebuild 来执行简单的构建任务 在非 vpc 配置中 但现在我尝试运行一个读取 SSM 参数值的构建任务 但它失败了 因为它无法加载任何凭据 明显的原因是 com amazonaws auth Instance
  • 将 JSON 转换为字符串时如何解决此 Javascript 错误?

    Uncaught TypeError Converting circular structure to JSON 我试图字符串化的对象是这样的 我将其记录在javascript控制台中 Object GsearchResultClass G
  • 每 100 个元素对 Python 列表进行切片的最 Pythonic 方法 [重复]

    这个问题在这里已经有答案了 我有一个包含许多元素的列表 我想每 100 个元素将其切片为多个列表的列表 例如 gt gt gt a range 256 gt gt gt b slice a 100 b那么应该是 0 1 2 99 100 1
  • window.innerHeight 与 window.outerHeight 计算密度?

    当我开始使用 PhoneGap 一个标尺 开发一个简单的应用程序时 我遇到了一个问题 我的大部分移动背景都是使用原生 Android 所以我就从它开始 我是 javascript 和 html5 以及一般 Web 开发的初学者 Here h