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 相关文章推荐
jQuery UI AutoComplete 使用说明
Jun 20 Javascript
js 字符串转化成数字的代码
Jun 29 Javascript
JavaScript使用replace函数替换字符串的方法
Apr 06 Javascript
JavaScript中使用指数方法Math.exp()的简介
Jun 15 Javascript
JavaScript实战之菜单特效
Aug 16 Javascript
AngularJS下对数组的对比分析
Aug 24 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
May 15 jQuery
使用vux实现上拉刷新功能遇到的坑
Feb 08 Javascript
基于vue通用表单解决方案的思考与分析
Mar 16 Javascript
JavaScript实现的联动菜单特效示例
Jul 08 Javascript
Vue中通过Vue.extend动态创建实例的方法
Aug 13 Javascript
小程序如何写动态标签的实现方法
Feb 05 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
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
2016/01/09 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
3Z版基于jquery的图片复选框(asp.net+jquery)
2010/04/12 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
2018/09/20 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
express框架下使用session的方法
2019/07/31 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
python读取Android permission文件
2013/11/01 Python
Python3 处理JSON的实例详解
2017/10/29 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
幼教个人求职信范文
2013/12/02 职场文书
淘宝活动策划方案
2014/02/06 职场文书
小学教师师德演讲稿
2014/05/06 职场文书
小学教师师德整改措施
2014/09/29 职场文书
档案工作个人总结
2015/03/03 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
详解python字符串驻留技术
2021/05/21 Python
nginx+lua单机上万并发的实现
2021/05/31 Servers
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript