当前位置:  开发笔记 > 编程语言 > 正文

从JS/CSS检测系统DPI/PPI?

如何解决《从JS/CSS检测系统DPI/PPI?》经验,为你挑选了4个好方法。

我正在研究一种独特的应用程序,它需要根据显示的设备生成特定分辨率的图像.因此,在常规Windows浏览器(96ppi),iPhone(163ppi),Android G1(180ppi)和其他设备上的输出是不同的.我想知道是否有办法自动检测到这一点.

我最初的研究似乎说不.我看到的唯一建议是在CSS中创建一个宽度指定为"1in"的元素,然后检查它的offsetWidth(另请参阅如何通过javascript访问屏幕显示的DPI设置?).有道理,但iPhone用这种技术骗我,说它是96ppi.

另一种方法可能是以英寸为单位获取显示尺寸,然后除以宽度(以像素为单位),但我不知道如何做到这一点.



1> 小智..:



2> Paul D. Wait..:

resolutionCSS媒体查询 - 它允许您将CSS样式限制为特定的分辨率:

http://www.w3.org/TR/css3-mediaqueries/#resolution

但是,它仅受Firefox 3.5及更高版本,Opera 9及更高版本以及IE 9的支持.其他浏览器根本不会应用特定于分辨率的样式(尽管我没有检查过非桌面浏览器).


这是一个测试它的游乐场http://home.heeere.com/tech-ppi-aware-css-media-query.html

3> Endless..:

我提出了一种根本不需要DOM的方法

DOM可能很乱,要求你在不知道width: x !important样式表中发生了什么东西的情况下将东西附加到身体上.您还必须等待DOM准备好使用...

// Binary search, (faster then loop)
// also don't test every possible value, since it tries low, mid, and high
// http://www.geeksforgeeks.org/find-the-point-where-a-function-becomes-negative/
function findFirstPositive(b, a, i, c) {
  c=(d,e)=>e>=d?(a=d+(e-d)/2,0=b(a-1))?a:0>=b(a)?c(a+1,e):c(d,a-1)):-1
  for (i = 1; 0 >= b(i);) i *= 2
  return c(i / 2, i)|0
}


var dpi = findFirstPositive(x => matchMedia(`(max-resolution: ${x}dpi)`).matches)

console.log(dpi)


4> 小智..:

这对我有用(但没有在手机上测试):

然后我放入.js: screenPPI = document.getElementById('ppitest').offsetWidth;

这让我96,这对应于我的系统的ppi.


这不适用于所有设备.我的Android手机报告也是96dpi.
不是错误 - "px"不是屏幕像素,它是固定长度0.75 pt,本身是1/72英寸.
这似乎不适用于任何设备.一切似乎报告96ppi:http://codepen.io/anon/full/mrfvg
推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有