微信小程序中吸底按钮适配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 自动完成 AutoComplete(Ajax 查询)
Jul 07 Javascript
Firefox+FireBug使JQuery的学习更加轻松愉快
Jan 01 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
Dec 29 Javascript
jquery ajax 局部无刷新更新数据的实现案例
Feb 08 Javascript
实现图片预加载的三大方法及优缺点分析
Nov 19 Javascript
JS常用函数使用指南
Nov 23 Javascript
第九篇Bootstrap导航菜单创建步骤详解
Jun 21 Javascript
jQuery给指定的table动态添加删除行的操作方法
Oct 12 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
Apr 24 Javascript
详解Vue.js自定义tipOnce指令用法实例
Dec 19 Javascript
微信小程序的tab选项卡的实现效果
May 15 Javascript
Element Collapse 折叠面板的使用方法
Jul 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
php标签云的实现代码
2012/10/10 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
2013/07/01 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
thinkphp实现like模糊查询实例
2014/10/29 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
JS写的数字拼图小游戏代码[学习参考]
2008/10/29 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
2013/06/04 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
表格展示利器 Bootstrap Table实例代码
2017/09/06 Javascript
Angular 多级路由实现登录页面跳转(小白教程)
2019/11/19 Javascript
Python语言实现百度语音识别API的使用实例
2017/12/13 Python
详解python中asyncio模块
2018/03/03 Python
python查看模块,对象的函数方法
2018/10/16 Python
python开头的coding设置方法
2019/08/08 Python
如何使用repr调试python程序
2020/02/28 Python
Python通过socketserver处理多个链接
2020/03/18 Python
在python中修改.properties文件的操作
2020/04/08 Python
python sleep和wait对比总结
2021/02/03 Python
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
运动会四百米广播稿
2014/01/19 职场文书
中学生差生评语
2014/01/30 职场文书
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
优良学风班总结材料
2014/02/08 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
教师创先争优承诺书
2015/04/27 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
java调用Restful接口的三种方法
2021/08/23 Java/Android
配置Kubernetes外网访问集群
2022/03/31 Servers
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL