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 相关文章推荐
Knockoutjs的环境搭建教程
Nov 26 Javascript
javascript删除数组元素并且数组长度减小的简单实例
Feb 14 Javascript
javascript实现简单的贪吃蛇游戏
Mar 31 Javascript
Bootstrap每天必学之基础排版
Nov 20 Javascript
javascript实现label标签跳出循环操作
Mar 06 Javascript
JavaScript的函数式编程基础指南
Mar 19 Javascript
JavaScript排序算法动画演示效果的实现方法
Oct 18 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
Feb 28 Javascript
jQuery实现输入框的放大和缩小功能示例
Jul 21 jQuery
React 组件渲染和更新的实现代码示例
Feb 21 Javascript
ElementUI Tag组件实现多标签生成的方法示例
Jul 08 Javascript
javascript 数组精简技巧小结
Feb 26 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下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
2014/05/06 PHP
PHP数组实例详解
2016/06/26 PHP
PHP实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
jquery 插件学习(六)
2012/08/06 Javascript
js点击更换背景颜色或图片的实例代码
2013/06/25 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
2016/12/25 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
vue使用代理解决请求跨域问题详解
2019/07/24 Javascript
[57:55]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第二场 12.12
2020/12/16 DOTA
Python多线程编程(五):死锁的形成
2015/04/05 Python
讲解Python中if语句的嵌套用法
2015/05/14 Python
windows下ipython的安装与使用详解
2016/10/20 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
python 执行shell命令并将结果保存的实例
2018/05/11 Python
Python+selenium 获取一组元素属性值的实例
2018/06/22 Python
Python并发:多线程与多进程的详解
2019/01/24 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
利用python画出AUC曲线的实例
2020/02/28 Python
python3.x中安装web.py步骤方法
2020/06/23 Python
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
小学生自我鉴定
2013/10/12 职场文书
会计找工作求职信范文
2013/12/09 职场文书
英文请假条
2014/04/11 职场文书
消防安全宣传标语
2014/06/07 职场文书
四风个人对照检查材料思想汇报(办公室通用版)
2014/10/07 职场文书
2016大学生国家助学贷款承诺书
2016/03/25 职场文书
Python制作表白爱心合集
2022/01/22 Python
springboot用户数据修改的详细实现
2022/04/06 Java/Android
Django框架模板用法详解
2022/06/10 Python