移动端h5的项目,大大小小也做了一些,遇到过不少问题,也踩过很多的坑,在这里总结一下,以备不时之需。
一、vue列表渲染track-by=”$index”
问题描述:
默认一般情况很少使用这个属性,但是在做评论列表时,需要实现一个提交即显示到列表的效果,所有采用了手动往列表数组中添加一条数组,而没有请求接口。如果不添加这个属性,添加的数据会替换原有位置的数据,而不会往数组中新增一个数据,Vue 不会移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素。
属性说明:
无track-by情况:数据修改时,无论值是否被修改,dom都被重新渲染(控制台可以看到)
加入track-by属性:数据修改时,不变数据所在的dom不被重新渲染,已改变的数据所在dom才被重新渲染
| 注意:track-by="$index"是vue 1.x的属性,在vue 2中是在渲染列表时添加key属性,效果一样。这个问题其实官方文档中有说明,自己当时没认真看o(╥﹏╥)o |
二、ios在键盘弹起后导致fixed定位失效问题
问题描述:
一般在留言列表一类的页面出现,当留言比较多,而且有分页的时候,当输入框获取焦点,弹出系统键盘,webview高度重新计算,会导致输入框的fixed定位失效,导致输入框可以向上滑动。属ios兼容性问题,安卓不会出现。
解决方案:
当输入法弹出时,给外层的包裹层添加
height:100%;
overflow:hidden;
即可解决该问题。
三、识别输入框中的换行
问题描述:
javascript获取到textarea文本框中的字符串中,如果包含有回车换行符,在字符串中表现为“\n”。
解决方案:
comment.replace(/\n/g,"<br />")
将内容中的‘\n’替换成为<br>
四、https的新页面路由地址,在支付宝和uc浏览器当中无法识别
问题描述:
在用vue开发一个扫码访问的h5的时候,在支付宝和uc浏览器当中无法识别新页面的路由地址
解决方案:
传到正式环境之后就可以扫码访问了
五、不定宽水平居中问题
解决方案:
display:table; //重点就是这个属性,这个样式会告知浏览器当前元素的宽度,采用最小的宽度,不是默认全宽
margin:0 auto;
六、安卓手机上文字无法垂直居中
问题描述:
rem的值为奇数时,会导致样式出错,文字无法垂直居中问题(font-size、line-height、padding等属性)
解决方案:
使用rem单位时尽量使用偶数,如0.6rem、0.8rem等
七、ios11中,内嵌在app里的h5页面,快速滑动出现空白卡顿
问题描述:
app里面有一个内嵌的h5页面,页面已经加载完成,滑动也没有分页,上下来回滑动的过程中,当被遮住的部分重现滑出来的时候会空白,然后重新渲染出来,闪一下,但是同样的h5页面在微信或外部浏览器打开则没有这个问题
解决方案:
搜索了一圈发现我们ios客户端使用的是UIWebView,而换成WKWebView后这个问题就好了
八、iPhoneX适配
// 1.viewport meta 标签增加属性viewport-fit=cover
<meta name="viewport" content="width=device-width, viewport-fit=cover, xxxx">
// 2.body元素增加样式
body {
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
}
// 3.如有fixed底部的元素,也增加上面样式
xxx {
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
background-color: #fff; // 记得添加background-color,不然会出现透明镂空的情况
}

