微信小程序中吸底按钮适配iPhone X方案


Posted in Javascript onNovember 29, 2017

随着第二三批iPhone X的陆续到货,身边的土豪们纷纷用了起来,因为iPhone X的齐刘海导致的适配问题很多,所以这群土豪更沉浸在各种找bug中,不出所料,豌豆公主小程序在一些地方也出现了一丢丢体验不好的地方,主要是商品详情页和购物车的吸底按钮栏,会与 Home Indicator 横条重叠,这样在点击下方按钮时很容易误触发手势操作,如下图:

微信小程序中吸底按钮适配iPhone X方案 

截图来自网络,侵删

是bug就得修,是体验问题就得优化,于是立马搞了一台iPhone X开始研究。

网页端的适配还好,有 viewport meta 标签以及下面的方案进行处理。具体可参看这里

{
 position: fixed;
 bottom: 0;
 width: 100%;
 height: constant(safe-area-inset-bottom);
 background-color: #fff;
}

但比较尴尬了,从四个角被裁掉的表现上可以推测小程序里的 viewport-fit 默认为 cover (根据表现猜测),但是没有接口去更改,所以网页端通过 viewport-fix=cover 结合 constant(safe-area-inset-bottom); 的适配方案不适合小程序。目前也没有看到小程序有对iPhone X等异形屏有特殊的接口或字段。小程序本身的底部tab栏对iPhone X的适配也只是简单的加了一个白色底栏,提高了原有tab栏的位置,为什么这么说呢?因为这一点可以从我们购物车页面看出,购物车页吸底操作并非通过 position:fixed;bottom:0; 实现的,而是根据 windowHeight-自身高度 计算 top 值,从而模拟的吸底,在小程序新版本适配iPhone X后,导致购物车底部按钮被盖住了一半,由此得出上面的结论。

言归正传,既然没有特殊的方案获取该值,我们只能通过 wx.getSystemInfo 接口取获取设备信息,该接口使用方法如下:

wx.getSystemInfo({
 success: function(res) {
  console.log(res.model)
  console.log(res.pixelRatio)
  console.log(res.windowWidth)
  console.log(res.windowHeight)
  console.log(res.language)
  console.log(res.version)
  console.log(res.platform)
 }
})

其中 model 便是设备的型号等信息,如果 model 中包含 iPhone X ,便可认为该设备为iPhone X,我们在入口文件 app.js 中去进行检测,然在全局增加一个 isIpx 字段,将结果赋予 isIpx 。

在子页面中可以读取该值,举个商品详情页的栗子:

<!-- goods.wxml -->
<view class="button-group {{isIpx?'fix-iphonex-button':''}}">这是一个吸底按钮区域</view>
// goods.js
let app = getApp();
Page({
  data: {
    isIpx: app.globalData.isIpx?true:false
  }
})
/* app.wxss */
.fix-iphonex-button {
  bottom:68rpx!important;
}
.fix-iphonex-button::after {
  content: ' ';
  position: fixed;
  bottom: 0!important;
  height: 68rpx!important;
  width: 100%;
  background: #fff;
}

于是,一个简单的适配iPhone X底部圆角的方案就完成了。

至于为什么采用 68rpx ,因为iPhone X和iPhone 6的屏幕宽度都是375px,小程序中 750rpx = 375px = 750物理像素 ,结合下面两图能解释原因:

微信小程序中吸底按钮适配iPhone X方案 

截图来自网络,侵删

微信小程序中吸底按钮适配iPhone X方案 

截图来自网络,侵删

总结

以上所述是小编给大家介绍的微信小程序中吸底按钮适配iPhone X方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
使用dynatrace-ajax跟踪JavaScript的性能
Apr 12 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
Apr 07 Javascript
JavaScript中OnLoad几种使用方法
Dec 15 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
Jan 02 Javascript
js控制输入框获得和失去焦点时状态显示的方法
Jan 30 Javascript
详解微信小程序开发之下拉刷新 上拉加载
Nov 24 Javascript
javascript实现用户点击数量统计
Dec 25 Javascript
详解Webpack + ES6 最新环境搭建与配置
Jun 04 Javascript
vue基于两个计算属性实现选中和全选功能示例
Feb 08 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
Mar 19 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
Oct 29 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
Feb 15 Javascript
jQuery zTree 异步加载添加子节点重复问题
Nov 29 #jQuery
写给小白看的JavaScript异步
Nov 29 #Javascript
3种vue组件的书写形式
Nov 29 #Javascript
easyui下拉框动态级联加载的示例代码
Nov 29 #Javascript
纯js实现隔行变色效果
Nov 29 #Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
Nov 29 #Javascript
微信小程序使用modal组件弹出对话框功能示例
Nov 29 #Javascript
You might like
PHP时间戳使用实例代码
2008/06/07 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
3个PHP多维数组转为一维数组的方法实例
2014/03/13 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
Angular通过angular-cli来搭建web前端项目的方法
2017/07/27 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
2017/12/19 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python缩进和冒号详解
2016/06/01 Python
python 迭代器和iter()函数详解及实例
2017/03/21 Python
python实现批量修改文件名代码
2017/09/10 Python
Python实现翻转数组功能示例
2018/01/12 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
pandas 对group进行聚合的例子
2019/12/27 Python
Pytorch之parameters的使用
2019/12/31 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
佳能法国商店:Canon法国
2019/02/14 全球购物
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
JPA面试常见问题
2016/11/14 面试题
历史专业毕业生的自我鉴定
2013/11/15 职场文书
毕业证丢失证明
2014/01/15 职场文书
表彰大会主持词
2014/03/26 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
关于召开会议的通知
2015/04/15 职场文书
防汛通知
2015/04/25 职场文书
小学作文之描写天气
2019/08/15 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python