微信小程序中吸底按钮适配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 相关文章推荐
JSON 入门指南 想了解json的朋友可以看下
Aug 26 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
May 04 Javascript
javascript string字符串优化问题
Jul 31 Javascript
node.js 一个简单的页面输出实现代码
Mar 07 Javascript
js setTimeout()函数介绍及应用以倒计时为例
Dec 12 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
Nov 17 Javascript
JavaScript学习笔记之Function对象
Jan 22 Javascript
AngularJS service之select下拉菜单效果
Jul 28 Javascript
vue的传参方式汇总和router使用技巧
May 22 Javascript
Node.js 使用axios读写influxDB的方法示例
Oct 26 Javascript
Angular如何由模板生成DOM树的方法
Dec 23 Javascript
深入解析微信小程序开发中遇到的几个小问题
Jul 11 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
ie与session丢失(新窗口cookie丢失)实测及解决方案
2013/07/15 PHP
PHP链表操作简单示例
2016/10/15 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
2017/08/04 PHP
学习YUI.Ext 第七天--关于View&amp;JSONView
2007/03/10 Javascript
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
js 数组当前行添加数据方法详解
2020/07/28 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
python抓取网页内容示例分享
2014/02/24 Python
基于python中theano库的线性回归
2018/08/31 Python
Python根据成绩分析系统浅析
2019/02/11 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
2020/03/30 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
超市仓管员岗位职责范本
2014/09/18 职场文书
老龙头导游词
2015/02/11 职场文书
企业战略合作意向书
2015/05/08 职场文书
新闻通讯稿模板
2015/07/22 职场文书
预备党员表决心的话
2015/09/22 职场文书
Python基础之数据结构详解
2021/04/28 Python
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript