显示器参数检测
把浏览器能看到的屏幕参数一次读全:分辨率、像素比、色深、色域、刷新率和触控能力,再按标称尺寸算出 PPI 和点距。
这些数值全部由浏览器在本机读出,不发送到任何服务器。窗口大小改变、系统缩放调整、或者把窗口拖到另一块屏幕上之后,点一次「重新检测」就能刷新。
正在读取屏幕参数……
屏幕参数
| 项目 | 数值 | 说明 |
|---|
刷新率实测
点上面的「实测刷新率」,会用 requestAnimationFrame 数 180 帧的间隔,大约三秒。测的时候请保持这个标签页可见——浏览器会把后台标签页压到每秒一帧,那时测出来的数字没有意义。
色深、色域与动态范围
浏览器没有返回色域信息,可能是版本较旧或者隐私设置限制了媒体查询。
浏览器没有返回动态范围信息。
PPI 与点距
标称分辨率按 — 计算,也就是屏幕尺寸乘上像素比。对角线尺寸要填显示器标称的那个数字,比如 27 英寸显示器就填 27。
PPI 是真分辨率除以对角线长度,和宽高比无关,所以 16:9 和 21:9 用同一个公式。点距是相邻同色子像素的中心距离,显示器宣传里的「0.233 毫米」说的就是它——数值越小画面越细腻,但对小字号的要求也越高。
输入方式
| 项目 | 结果 | 说明 |
|---|---|---|
| 主指针类型 | 没有识别到指针 | 这一项决定了网页会让哪些控件变大:粗略指针会得到更大的点击热区。 |
| 指针精度 | 未知 | fine 一般代表有鼠标或触控笔,coarse 一般代表靠手指操作。 |
| 悬停能力 | 不支持悬停 | 设备无法在按下之前把指针「停」在元素上,所以所有 hover 效果都不可用,交互要另外设计。 |
| 触控点数 | 0 点 | 没有触控输入。 |
浏览器是否支持把一帧内的多次指针采样交出来:不支持。 当前浏览器没有 getCoalescedEvents,鼠标轮询率只能看合并后的结果,Safari 一直不支持这个接口。
悬停能力的四个状态:精确指针 不支持、粗略指针 不支持、可悬停 不支持、明确不可悬停 否。
这些数值能说明什么,不能说明什么
报告色深不是面板位深。浏览器给出的 colorDepth 描述的是它自己那块帧缓冲区的位深,跟面板原生是 8 位还是 10 位没有必然关系。一块 8 位面板跑在 10 位输出管线上,读到的照样是 30;反过来,10 位面板在没有开启高位深的系统上只会报 24。所以这个数字能用来判断「当前输出管线开到多少位」,不能用来给面板定性。想验证面板,得看灰阶和渐变测试的实际表现。
色域等级只说明「浏览器认为能到哪一档」。媒体查询只会返回 srgb、p3、rec2020 三档,不会给具体覆盖率。所以一块覆盖 82% P3 的屏和一块覆盖 99% P3 的屏,在这里可能都显示 p3。反过来,读到 srgb 也不代表屏幕一定是窄色域——系统色彩管理没正确识别时也会回落。要准确测色域覆盖率,只能靠色度计。
刷新率实测值的上限受浏览器限制。requestAnimationFrame 的回调频率就是浏览器准备提交帧的频率,它会被显示器刷新率限制,但也会被节能模式、窗口失焦、以及页面自身的计算量拖低。所以测出 59.5 而不是 60,是正常的测量误差;测出 30,多半是省电模式或者页面在忙。另外,Windows 上如果没在显示设置里把刷新率调上去,浏览器也只能按 60 走。
页面缩放和系统缩放是两件事。这里的「页面缩放」是按像素比和屏幕宽度反推出来的近似值,浏览器自己的缩放会被算进设备像素比,所以调整缩放会让这个数字变化;滚动条出现时读数会偏低一两个百分点。而「像素比」反映的是系统缩放加浏览器缩放的叠加结果。想知道分辨率有没有设到原生值,把「视口(物理像素)」和系统显示设置里的分辨率对一下最快。
换个屏幕就要重新检测。笔记本电脑外接显示器、或者把浏览器窗口拖到另一块屏上,screen 的读数和 devicePixelRatio 都会立刻变,但页面不会自动重算。这时候点一下「重新检测」就能拿到新屏幕的参数。多屏且两块屏缩放比例不同的情况下,像素比是跟着窗口所在的那块屏走的。