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实现页面滚动时层智能浮动定位实例探讨
Mar 29 Javascript
Javascript中匿名函数的多种调用方式总结
Dec 06 Javascript
详解JavaScript对象和数组
Dec 03 Javascript
在html中引入外部js文件,并调用带参函数的方法
Oct 31 Javascript
学习vue.js条件渲染
Dec 03 Javascript
浅谈ECMAScript6新特性之let、const
Aug 02 Javascript
使用cookie绕过验证码登录的实现代码
Oct 12 Javascript
微信小程序画布圆形进度条显示效果
Nov 17 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
Oct 26 jQuery
js里面的变量范围分享
Jul 18 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
Jul 24 Javascript
React如何创建组件
Jun 27 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写的采集程序
2007/03/16 PHP
php 批量替换html标签的实例代码
2013/11/26 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
node.js中的path.basename方法使用说明
2014/12/09 Javascript
JS+CSS相对定位实现的下拉菜单
2015/10/06 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
jquery实现楼层滚动效果
2018/01/01 jQuery
vue2.0 better-scroll 实现移动端滑动的示例代码
2018/01/25 Javascript
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
Python request post上传文件常见要点
2020/11/20 Python
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
C++是不是类型安全的
2014/02/18 面试题
网络安全方面的面试题
2015/11/04 面试题
学校消防安全制度
2014/01/30 职场文书
食品安全检查制度
2014/02/03 职场文书
安全生产活动月方案
2014/03/09 职场文书
公司经理聘任书
2014/03/29 职场文书
培训讲师岗位职责
2014/04/13 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
2014年优秀党员材料
2014/12/18 职场文书
先进班集体事迹材料
2014/12/25 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
python基础之类方法和静态方法
2021/10/24 Python