JavaScript 判断iPhone X Series机型的方法


Posted in Javascript onJanuary 28, 2019

写在前面

如果有更优雅的方式,一定要告诉我!

现状

iPhone X 底部是需要预留 34px 的安全距离,需要在代码中进行兼容。

现状对于 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 Series 参数

机型 倍率 分辨率 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 判断,否则可能会误判一些安卓机。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Ajax清除浏览器js、css、图片缓存的方法
Aug 06 Javascript
jQuery旋转插件jqueryrotate用法详解
Oct 13 Javascript
移动端利用H5实现压缩图片上传功能
Mar 29 Javascript
Node接收电子邮件的实例代码
Jul 21 Javascript
JS轮播图实现简单代码
Feb 19 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
Apr 17 Javascript
webpack4的迁移的使用方法
May 25 Javascript
Redux实现组合计数器的示例代码
Jul 04 Javascript
微信小程序实现九宫格抽奖
Apr 15 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
Jun 18 jQuery
JS实现瀑布流效果
Mar 07 Javascript
vue - props 声明数组和对象操作
Jul 30 Javascript
JS实现二维数组元素的排列组合运算简单示例
Jan 28 #Javascript
新手快速上手webpack4打包工具的使用详解
Jan 28 #Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
Jan 28 #jQuery
详解项目升级到vue-cli3的正确姿势
Jan 28 #Javascript
jQuery实现合并表格单元格中相同行操作示例
Jan 28 #jQuery
this在vue和小程序中的使用详解
Jan 28 #Javascript
Vue加载json文件的方法简单示例
Jan 28 #Javascript
You might like
php中神奇的fastcgi_finish_request
2011/05/02 PHP
360通用php防护代码(使用操作详解)
2013/06/18 PHP
php中header跳转使用include包含解决参数丢失问题
2015/05/08 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
jQuery Form 页面表单提交的小例子
2013/11/15 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
JavaScript动态数量的文件上传控件
2016/11/18 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
原生js实现自定义难度的扫雷游戏
2021/01/22 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
python 运用Django 开发后台接口的实例
2018/12/11 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
pandas数据处理进阶详解
2019/10/11 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
HTML5中的新元素介绍
2008/10/17 HTML / CSS
Under Armour安德玛意大利官网:美国高端运动科技品牌
2020/01/16 全球购物
高中生的自我鉴定范文
2014/01/24 职场文书
爱心倡议书范文
2014/05/12 职场文书
理想演讲稿范文
2014/05/21 职场文书
中学生民族团结演讲稿
2014/08/27 职场文书
2015年学校办公室工作总结
2015/05/26 职场文书