微信小程序中吸底按钮适配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 相关文章推荐
js GridView 实现自动计算操作代码
Mar 25 Javascript
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
Apr 02 Javascript
jQuery之网页换肤实现代码
Apr 30 Javascript
Jquery全选与反选点击执行一次的解决方案
Aug 14 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
Mar 24 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
Oct 27 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
Feb 05 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
Nov 14 Javascript
vue的keep-alive中使用EventBus的方法
Apr 23 Javascript
Javascript实现简易天数计算器
May 18 Javascript
node.js基础知识汇总
Aug 25 Javascript
vue通过接口直接下载java生成好的Excel表格案例
Oct 26 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
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
js禁止页面复制功能禁用页面右键菜单示例代码
2013/08/29 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
JS小游戏之宇宙战机源码详解
2014/09/25 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
iframe高度自适应及隐藏滚动条的实例详解
2017/09/29 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
vue 使用vue-i18n做全局中英文切换的方法
2018/10/29 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
解决vue addRoutes不生效问题
2020/08/04 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
python实现简易云音乐播放器
2018/01/04 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
django orm 通过related_name反向查询的方法
2018/12/15 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
pandas取出重复数据的方法
2019/07/04 Python
详解numpy.meshgrid()方法使用
2019/08/01 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
常用UNIX 命令(Linux的常用命令)
2013/07/10 面试题
测试工程师岗位职责
2013/11/28 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
2015年绩效考核工作总结
2015/05/23 职场文书
使用redis生成唯一编号及原理示例详解
2021/09/15 Redis