我使用的是window.devicePixelRatio,适用于Android和Iphone,但在IE 10 Windows Mobile中无效。任何替代方案?
答案 0 :(得分:17)
对于桌面和移动设备的IE后备,请使用:
window.devicePixelRatio = window.devicePixelRatio ||
window.screen.deviceXDPI / window.screen.logicalXDPI;
答案 1 :(得分:7)
window.devicePixelRatio = window.devicePixelRatio ||
Math.round(window.screen.availWidth / document.documentElement.clientWidth)
答案 2 :(得分:3)
我发现在诺基亚Lumia 1230上,属性window.devicePixelRatio返回1,即使该值明显不正确。测试window.screen.deviceXDPI / window.screen.logicalXDPI返回1.52083333。 所以首先使用window.devicePixelRatio不是一个好主意。
我建议如下:
function getDevicePixelRatio (){
var pixelRatio = 1; // just for safety
if('deviceXDPI' in screen){ // IE mobile or IE
pixelRatio = screen.deviceXDPI / screen.logicalXDPI;
} else if (window.hasOwnProperty('devicePixelRatio')){ // other devices
pixelRatio = window.devicePixelRatio;
}
return pixelRatio ;
}
出于某种原因,使用最佳方法测试屏幕对象中是否存在deviceXDPI:
if(screen.hasOwnProperty('deviceXDPI')) {// IE mobile or IE
无法在此手机上使用。
答案 3 :(得分:2)
实际上,之前的答案都不正确。以下所有测试均在具有480 * 800的LCD屏幕的Lumia 520电话上进行:
WP8 / IE Mobile 10:
预期的devicePixelRatio 480/320 = 1.5 ,可以通过以下方式计算:
Math.round(screen.availWidth * screen.deviceXDPI / screen.logicalXDPI / 4) * 4 / document.body.clientWidth
(获得有效的LCD屏幕尺寸需要进行舍入)
WP8.1 / IE Mobile 11:
预期的devicePixelRatio(再次) 480/320 = 1.5 ,可以通过以下方式计算:
Math.round(screen.availWidth * window.devicePixelRatio / 4) * 4 / document.body.clientWidth
因此,即使存在window.devicePixelRatio,它也会为您提供DOM屏幕大小与LCD屏幕大小之间的比率,但DOM屏幕大小大于可用的视口大小。如果您想知道CSS像素和设备像素之间的确切比例,那么您必须进行上述计算。此外,这些计算在纵向模式下有效。在横向模式下,使用screen.availHeight(在IE Mobile上,方向更改时DOM屏幕尺寸不会改变)。