有没有办法在 Javascript 函数中访问屏幕显示的 DPI 设置?
我试图在页面上放置一个 HTML 面板,当用户的 DPI 设置为大 (120) 时,它会关闭该位置。我需要能够知道 DPI 是什么,以便我可以相应地调整位置。
有没有办法在 Javascript 函数中访问屏幕显示的 DPI 设置?
我试图在页面上放置一个 HTML 面板,当用户的 DPI 设置为大 (120) 时,它会关闭该位置。我需要能够知道 DPI 是什么,以便我可以相应地调整位置。
看起来您可以在 IE 中使用“屏幕”DOM 对象,它具有 deviceXDPI、deviceYDPI、logicalXDPI、logicalYDPI 的属性。
https://www.w3schools.com/jsref/obj_screen.asp
这是来自http://www.webdeveloper.com/forum/showthread.php?t=175278的解决方案 (我没有尝试过,似乎完全是 hack :) 只需创建 1 英寸宽的东西并以像素为单位进行测量!
console.log(document.getElementById("dpi").offsetHeight);
#dpi {
height: 1in;
left: -100%;
position: absolute;
top: -100%;
width: 1in;
}
<div id="dpi"></div>
首先,为了帮助解决与术语 DPI(每英寸点数)可能(并且非常常见)的混淆:
DPI 不完全是“显示设置”的一部分。它在两种不同的情况下(误用):
打印图像时,有很多因素会影响纸张上图像的最终尺寸:
最重要的是,您正在打印的图像将有效地重新采样(缩小或放大)以匹配打印过程中使用的最终 DPI。任何相关方都可能导致此问题(程序、打印驱动程序、打印机)。
现在,回到你的问题。不,您无法确定屏幕的 DPI,因为它不在软件域中。这是一个硬件领域术语,描述了用户可以购买多大的显示器。 更新:我最初在 2009 年写了这个答案,我对当前技术的理解。正如@thure 指出的那样,您现在(从 2012 年开始?)可以使用window.matchMedia函数来确定屏幕的 DPI。
如果您尝试在打印 HTML 布局时达到精度,正如其他人所建议的那样,您的 CSS 应使用 em、pt 或 pc 等打印尺寸而不是 px。但是,最终结果可能仍取决于使用的浏览器。如果您可以选择将 HTML 转换为 PDF(或从头开始生成 PDF),那么打印 PDF 将为您在屏幕和纸张上提供最真实的所见即所得。
您可以使用该window.devicePixelRatio
属性来获取屏幕/页面的缩放比例。这在当前桌面(Windows)上的 IE、Edge、Chrome 和 Firefox 中运行良好,但它似乎不是当前的标准。它在我的台式电脑上用传统显示器返回 1,在 Surface 上用 200% 缩放返回 2。这些天的值应该在 1.0 到 3.0 之间。我可以使用它来校正动态图像投放大小,以在高分辨率屏幕上提供更清晰的图像。
如果您需要一些逻辑 dpi/ppi,请将该值乘以 96。不过,它不是实际的物理 ppi,而是操作系统对待它的方式。
我不知道有一种方法,但是,它们可能是另一种解决方案:
在“pt”和“em”中指定您的测量值,它们是屏幕相关指标。
http://www.w3schools.com/cssref/css_units.asp
https://css-tricks.com/the-lengths-of-css/
- em:
1em
等于当前字体大小。2em
表示当前字体大小的 2 倍。例如,如果一个元素以 字体显示12 pt
,'2em'
则为24 pt
。在'em'
CSS 中是一个非常有用的单位,因为它可以自动适应读者使用的字体- pt:
点(1 pt
与 相同1/72 inch
)- pc:
异食癖(1 pc
同12 points
)