Ответ 1
В соответствии со всем, что я читал недавно, браузеры, похоже, движутся к выражению resolution
media query. Это вместо device-pixel-ratio
, которое используется в принятом в настоящее время ответе. Причина, по которой device-pixel-ratio
следует использовать только как резерв, состоит в том, что это не стандартный медиа-запрос.
Согласно w3.org:
Когда-то Webkit решил, что необходим медиа-запрос для разрешения экрана. Но вместо использования уже стандартизованного мультимедийного запроса разрешения они изобрели -webkit-device-pixel-ratio.
Резолюция Media Query Documentation
Так как resolution
стандартизирован, и поэтому будущее позволяет использовать это сначала в обнаружении для будущей проверки. Кроме того, поскольку я не уверен, что вы хотите обнаруживать только высокие устройства dppx или только устройства только сетчатки (только Apple), я добавил один из них. Наконец, как замечание, обнаружение Apple - это просто нюхание агента пользователя, поэтому на него нельзя влиять. Примечание: для функции isRetina
я использую dppx из 2 вместо 1.3, потому что все устройства apple сетчатки имеют 2dppx.
function isHighDensity(){
return ((window.matchMedia && (window.matchMedia('only screen and (min-resolution: 124dpi), only screen and (min-resolution: 1.3dppx), only screen and (min-resolution: 48.8dpcm)').matches || window.matchMedia('only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 2.6/2), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (min-device-pixel-ratio: 1.3)').matches)) || (window.devicePixelRatio && window.devicePixelRatio > 1.3));
}
function isRetina(){
return ((window.matchMedia && (window.matchMedia('only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx), only screen and (min-resolution: 75.6dpcm)').matches || window.matchMedia('only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min--moz-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2)').matches)) || (window.devicePixelRatio && window.devicePixelRatio >= 2)) && /(iPad|iPhone|iPod)/g.test(navigator.userAgent);
}