微信小程序中吸底按钮适配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代码
Mar 11 Javascript
jQuery 相关控件的事件操作分解
Aug 03 Javascript
JS 动态获取节点代码innerHTML分析 [IE,FF]
Nov 30 Javascript
js自定义事件及事件交互原理概述(二)
Feb 01 Javascript
jquery 延迟执行实例介绍
Aug 20 Javascript
javascipt:filter过滤介绍及使用
Sep 10 Javascript
使用JS实现气泡跟随鼠标移动的动画效果
Sep 16 Javascript
基于Vuex无法观察到值变化的解决方法
Mar 01 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
Mar 06 Javascript
vue .sync修饰符的使用详解
Jun 15 Javascript
详解如何构建一个Angular6的第三方npm包
Sep 07 Javascript
基于js实现抽红包并分配代码实例
Sep 19 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编码规范-php coding standard
2007/03/16 PHP
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
PHP生成随机密码类分享
2014/06/25 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
Javascript hasOwnProperty 方法 &amp; in 关键字
2008/11/26 Javascript
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
JS的replace方法介绍
2012/10/20 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
JavaScript提高性能知识点汇总
2016/01/15 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
js Dom实现换肤效果
2017/10/21 Javascript
Vue侧滑菜单组件——DrawerLayout
2017/12/18 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
详解jQuery中的getAll()和cleanData()
2019/04/15 jQuery
jquery ajax 请求小技巧实例分析
2019/11/11 jQuery
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
python中的逆序遍历实例
2019/12/25 Python
Web前端绘制0.5像素的几种方法
2017/08/11 HTML / CSS
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
Java软件工程师综合面试题笔试题
2013/09/08 面试题
保护环境标语
2014/06/09 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
2015年党员自评材料
2014/12/17 职场文书
堂吉诃德读书笔记
2015/06/30 职场文书
公司酒会致辞
2015/07/30 职场文书
sql查询结果列拼接成逗号分隔的字符串方法
2021/05/25 SQL Server