有没有办法在JavaScript函数中访问屏幕显示的DPI设置?如何通过JavaScript访问屏幕显示的DPI设置?
我想在页面上放置一个HTML面板,并且当用户的DPI设置为大(120)时,它会抛出该位置。我需要能够知道DPI是什么,所以我可以相应地调整位置。
有没有办法在JavaScript函数中访问屏幕显示的DPI设置?如何通过JavaScript访问屏幕显示的DPI设置?
我想在页面上放置一个HTML面板,并且当用户的DPI设置为大(120)时,它会抛出该位置。我需要能够知道DPI是什么,所以我可以相应地调整位置。
首先,以帮助与术语DPI的可能的(并且很常见)混乱(每英寸点数):
DPI不完全是“显示设置”的一部分。这是(错误)在两个不同的上下文中使用:
当打印图像时,存在影响在纸张上的图像的最终尺寸许多事情:
底线是,您正在打印的图像将被有效地重新采样(缩小或放大)以匹配打印过程中使用的最终DPI。任何一方都可能造成这种情况(程序,打印驱动程序,打印机)。
现在,回到你的问题。不,您无法确定屏幕的DPI,因为它不在软件域中。这是一个硬件领域术语,描述了用户可以购买的显示器的大小。更新:我最初在2009年写了这个答案,与我对当前技术的理解。正如@thure指出的,你现在可以(自2012年起)使用window.matchMedia函数来确定屏幕的DPI。
如果您试图在打印HTML布局时达到精确度,如其他人所建议的那样,您的CSS应该使用像em,pt或pc这样的打印尺寸来代替px。但是,最终的结果可能仍然取决于浏览器的使用。如果将HTML转换为PDF(或从头开始生成PDF)是您的选择,打印PDF将为您提供屏幕和纸张上最真实的所见即所得。
没有办法,我知道的,但是,它们可能是一种替代解决方案:
指定“PT”您的测量和“时间”,这是屏幕相对指标。
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
)
貌似可以在IE中使用 '屏幕' DOM对象,deviceXDPI,deviceYDPI,logicalXDPI,logicalYDPI其得到的属性。
hxxp://www.w3schools.com/htmldom/dom_obj_screen.asp
下面是http://www.webdeveloper.com/forum/showthread.php?t=175278 溶液(我还没有尝试过,似乎是一个总的黑客:) 只是创造一些1英寸宽,用像素来衡量它!
HTML:
<div id="dpi"></div>
风格:
#dpi {
height: 1in;
left: -100%;
position: absolute;
top: -100%;
width: 1in;
}
的Javascript:
function getDPI() {
return document.getElementById("dpi").offsetHeight;
}
您可以使用window.devicePixelRatio
属性来获取屏幕/页面的缩放比例。这适用于桌面(Windows)上当前的IE,Edge,Chrome和Firefox,但它似乎不是当前的标准。它在传统监视器的桌面PC上返回1,在200%缩放的Surface上返回2。这些天的数值应该在1.0到3.0之间。我可以使用它来纠正动态图像服务大小,以便在高分辨率屏幕上提供更清晰的图像。
如果您需要一些逻辑dpi/ppi,请将该值乘以96.但它不会是实际的物理ppi,而只是操作系统对待它的样子。
$(document).ready(function(){
$("body").append("<div style='poosition:fixed;width:1cm;height:1cm;'class='SCREENDPITEST'></div>")
screen.dpi = Math.floor($(".SCREENDPITEST").width() * 2.54);
\t $(".SCREENDPITEST").remove()
document.write(screen.dpi)
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
尽管您无法更改物理DPI,您可以*更改将测量映射到像素的软件,该软件由软件,它具有任意值,通常通过EDID从监视器探测,但可以被覆盖。这是我认为OP的进展。 – 2009-01-26 05:38:10