Оригинальная ссылка:JavaScript для определения моделей iPhone X Series
написать впереди
Если есть более элегантный способ, обязательно дайте мне знать!
статус-кво
Нижняя часть iPhone X должна иметь безопасное расстояние в 34 пикселя, что должно быть совместимо с кодом.
Оценка статус-кво в отношении iPhone X в основном выглядит следующим образом:
// h5
export const isIphonex = () => /iphone/gi.test(navigator.userAgent) && window.screen && (window.screen.height === 812 && window.screen.width === 375);
Раньше это было нормально, но после выхода новых устройств iPhone X Series возникнут проблемы с совместимостью.
Технические характеристики iPhone серии X
модель | увеличение | разрешение | pt |
---|---|---|---|
iPhone X | 3 | 2436 × 1125 | 812 × 375 |
iPhone XS | 3 | 2436 × 1125 | 812 × 375 |
iPhone XS Max | 3 | 2688 × 1242 | 896 × 414 |
iPhone XR | 2 | 1792 × 828 | 896 × 414 |
width === 375 && height === 812 может распознавать только iPhone X и iPhone XS, и ничего нельзя сделать для iPhone XS Max и iPhone XR.
Решение
Оценка каждой модели
const isIphonex = () => {
// X XS, XS Max, XR
const xSeriesConfig = [
{
devicePixelRatio: 3,
width: 375,
height: 812,
},
{
devicePixelRatio: 3,
width: 414,
height: 896,
},
{
devicePixelRatio: 2,
width: 414,
height: 896,
},
];
// h5
if (typeof window !== 'undefined' && window) {
const isIOS = /iphone/gi.test(window.navigator.userAgent);
if (!isIOS) return false;
const { devicePixelRatio, screen } = window;
const { width, height } = screen;
return xSeriesConfig.some(item => item.devicePixelRatio === devicePixelRatio && item.width === width && item.height === height);
}
return false;
}
единый подход
Потому что теперь модели iPhone после iPhone X должны быть адаптированы, чтобы можно было обращаться с моделями после X. Мы можем думать, что характеристики этой серии мобильных телефоновios
+ 长脸
.
С ним легко справиться на H5.
const isIphonex = () => {
if (typeof window !== 'undefined' && window) {
return /iphone/gi.test(window.navigator.userAgent) && window.screen.height >= 812;
}
return false;
};
запросы средств массовой информации
@media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) {
}
@media only screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) {
}
@media only screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) {
}
Медиа-запрос не может определить, является ли это iOS или нет, и для оценки необходимо добавить слой JS, иначе некоторые устройства Android могут быть неправильно оценены.