微信小程序中吸底按钮适配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 相关文章推荐
javascript学习笔记(十四) window对象使用介绍
Jun 20 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
Aug 13 Javascript
JQuery跳出each循环的方法
Apr 16 Javascript
jQuery实现鼠标选文字发新浪微博的方法
Apr 02 Javascript
利用JS实现页面删除并重新排序功能
Dec 09 Javascript
jQuery.cookie.js使用方法及相关参数解释
Mar 06 Javascript
Vue axios 中提交表单数据(含上传文件)
Jul 06 Javascript
详解Webpack + ES6 最新环境搭建与配置
Jun 04 Javascript
React Native基础入门之调试React Native应用的一小步
Jul 02 Javascript
详解webpack引入第三方库的方式以及注意事项
Jan 15 Javascript
JavaScript实现京东放大镜效果
Dec 03 Javascript
原生JavaScript实现幻灯片效果
Feb 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 cron中的批处理
2008/09/16 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
PHP6新特性分析
2016/03/03 PHP
php实现等比例不失真缩放上传图片的方法
2016/11/14 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
HTML代码中标签的全部属性 中文注释说明
2009/03/26 Javascript
jQuery 图像裁剪插件Jcrop的简单使用
2009/05/22 Javascript
js 数据类型转换总结笔记
2011/01/17 Javascript
js获取单选框或复选框值及操作
2012/12/18 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
对 jQuery 中 data 方法的误解分析
2014/06/18 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
2015/06/19 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
2019/10/12 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
Python实现简单遗传算法(SGA)
2018/01/29 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
python实现推箱子游戏
2020/03/25 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
店长助理岗位职责
2013/12/13 职场文书
创业计划书的内容步骤和要领
2014/01/04 职场文书
学习标兵获奖感言
2014/02/20 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
质量保证书格式模板
2015/02/27 职场文书
MySQL性能压力基准测试工具sysbench的使用简介
2021/04/21 MySQL
MySQL sql_mode修改不生效的原因及解决
2021/05/07 MySQL
vue自定义右键菜单之全局实现
2022/04/09 Vue.js
Python first-order-model实现让照片动起来
2022/06/25 Python