微信小程序中吸底按钮适配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 相关文章推荐
ajax 文件上传应用简单实现
Mar 03 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
Oct 17 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
Jan 23 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
Feb 19 Javascript
jQuery的观察者模式详解
Dec 22 Javascript
JavaScript中的立即执行函数表达式介绍
Mar 15 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
Jun 19 Javascript
详解webpack2+React 实例demo
Sep 11 Javascript
Vue-Router模式和钩子的用法
Feb 28 Javascript
深入浅出理解JavaScript高级定时器原理与用法
Aug 02 Javascript
微信小程序实现左侧滑动导航栏
Apr 08 Javascript
微信小程序实现同时上传多张图片
Feb 03 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
mysql 全文搜索 技巧
2007/04/27 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
详解微信小程序 template添加绑定事件
2017/06/23 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
js获取form表单中name属性的值
2019/02/27 Javascript
vue-cli项目使用mock数据的方法(借助express)
2019/04/15 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
Python入门篇之数字
2014/10/20 Python
python去除文件中重复的行实例
2018/06/29 Python
python画折线图的程序
2018/07/26 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
Django中的session用法详解
2020/03/09 Python
pycharm永久激活超详细教程
2020/10/29 Python
python try...finally...的实现方法
2020/11/25 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
百丽国际旗下购物网站:优购
2017/02/28 全球购物
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
求职者应聘的自我评价
2013/10/16 职场文书
质量负责人任命书
2014/06/06 职场文书
医学检验专业自荐信
2014/09/18 职场文书
索赔员岗位职责
2015/02/15 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书
Python中常见的导入方式总结
2021/05/06 Python
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript