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 相关文章推荐
Whatever:hover 无需javascript让IE支持丰富伪类
Jun 29 Javascript
jquery下将选择的checkbox的id组成字符串的方法
Nov 28 Javascript
javascript 函数声明与函数表达式的区别介绍
Oct 05 Javascript
js读写json文件实例代码
Oct 21 Javascript
jQuery实现个性翻牌效果导航菜单的方法
Mar 09 Javascript
原生JavaScript实现滚动条效果
Mar 24 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
Apr 01 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
Sep 22 Javascript
jQuery如何防止Ajax重复提交
Oct 14 Javascript
JavaScript中boolean类型之三种情景实例代码
Nov 21 Javascript
JS实现的JSON数组去重算法示例
Apr 11 Javascript
vue实现移动端项目多行文本溢出省略
Jul 29 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中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
php实现简单洗牌算法
2013/06/18 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
php环境套包 dedeampz 伪静态设置示例
2014/03/26 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
拖拉表格的JS函数
2008/11/20 Javascript
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
jquery CSS选择器笔记
2010/03/29 Javascript
JavaScript实用技巧(一)
2010/08/16 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
jquery导航制件jquery鼠标经过变色效果示例
2013/12/05 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
2015/03/03 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
2016/08/10 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
简析Python的闭包和装饰器
2016/02/26 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
用Python识别人脸,人种等各种信息
2019/07/15 Python
Python argparse模块应用实例解析
2019/11/15 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
中国梦的演讲稿
2014/01/08 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
python实现剪贴板的操作
2021/07/01 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022/04/04 Python
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js