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 相关文章推荐
javascript脚本编程解决考试分数统计问题
Oct 18 Javascript
查询绑定数据岛的表格中的文本并修改显示方式的js代码
Dec 15 Javascript
在VS2008中使用jQuery智能感应的方法
Dec 30 Javascript
javascript调试之DOM断点调试法使用技巧分享
Apr 15 Javascript
jQuery操作表单常用控件方法小结
Mar 23 Javascript
JavaScript_object基础入门(必看篇)
Jun 13 Javascript
微信小程序上传图片实例
May 28 Javascript
JS调用安卓手机摄像头扫描二维码
Oct 16 Javascript
微信小程序云开发之模拟后台增删改查
May 16 Javascript
jQuery操作cookie的示例代码
Jun 05 jQuery
解决layui表格内文本超出隐藏的问题
Sep 12 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
Aug 28 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
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
2017/03/16 PHP
php简单检测404页面的方法示例
2019/08/23 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
js异步加载的三种解决方案
2013/03/04 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
小程序实现多列选择器
2019/02/15 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
利用python程序帮大家清理windows垃圾
2017/01/15 Python
Python实现句子翻译功能
2017/11/14 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
python实现邮件自动发送
2019/08/10 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
计算机大学生的自我评价
2013/10/15 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
幼师大班个人总结
2015/02/13 职场文书
贷款工资证明范本
2015/06/12 职场文书
Ajax请求超时与网络异常处理图文详解
2021/05/23 Javascript
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL