一、通用问题
scroll-view 不滑动问题
开发微信小程序的时候都会遇到scroll-view不滑动的情况,造成scroll-view不滑动的原因有很多,横向和竖向不滑动的原因也不同解决方案:
1 竖直方向
对于竖直方向的滑动,造成原因如下:
① scroll-view 的 scroll-y 是否为 true
② scroll-view 必须设置具体的高度,如果没有设置高度,或者直接继承父元素高度100%,那么 scroll-view竖直方向将无效。我们必须动态获取scroll-height因为在不同型号手机,都要达到完美的效果
如何正确获取scroll-view高度
情况一 scroll-view 在中间的情况:
const scrollHeight = windowHeight - scrollTop - scrollBottom
情况二 scroll-view 靠底部的情况 :
const scrollHeight = windowHeight - scrollTop
③ 检查 scroll-view 是否设置了 overflow-y: auto; 等滑动属性。
<scroll-view :scroll-y="true" class="scroll_box" ><!-- 此处省略很多东西 --></scroll-view>.scroll_box{height:500px;overflow-y: auto;}
2 水平方向
对于水平方向的滑动,造成原因如下:
① scroll-view 的 scroll-x 是否为 truejs <scroll-view :scroll-x="true" > <!-- 此处省略很多东西 --> </scroll-view>
② 不要设置 display:flex; 等情况 ,让子元素设置 display:inline-block
③ scroll-view 设置样式 white-space: nowrap;
<scroll-view :scroll-x="true" style="white-space: nowrap;" ></scroll-view>
微信小程序跳转微信小程序,第二次跳转无效
有一个小程序跳转另外一个小程序的场景,第一次的时候没有任何问题,但是当从跳转的目标小程序,返回到当前小程序之后,第二次跳转的时候,发现跳转功能失效了,无法再次跳转。我们的跳转逻辑是写在一个小程序过渡页面的生命周期中的。
分析原因
微信文档有这么一句话,需要用户触发跳转,从 2.3.0 版本开始,若用户未点击小程序页面任意位置,则开发者将无法调用此接口自动跳转至其他小程序 最后发现是第二次跳转的过程中,由于不是用户主动行为(点击事件等人为主动的行为),而是又过渡页面的生命周期执行的跳转小程序,所以微信被判定无效的跳转,就会直接走跳转失败的逻辑,webview里面的点击跳转事件不算是用户的主动行为.
解决方案
所以我们在过渡页进行一判断,如果是第二次跳转,先弹出弹窗,让用户主动点击,触发用户主动行为。然后再跳转小程序。
wx.navigateToMiniProgram({appId:'appId',path:'路径',extraData:'需要传递给小程序的数据',success(){}, // 成功回调fail(){}, //失败回调complete(){} //无论成功/失败,都会执行完成方法。})
二、IOS 问题
微信小程序1rpx border ios真机显示不全问题
微信小程序在iphone低版本手机(iphone6 ,6p),如果多个视图容器排列(水平和竖直方向都会存在),可能会出现个别边框显示不全的问题。分析问题
当标签的父容器宽度(单位rpx)÷2的值为偶数或偶数.5的时候会出现该bug,那么我们可以推到出用200.52=401,3022=604等等都会重现这个bug
解决问题
放一个1rpx的元素占位
<view class="father" ><view class="hold" /><view class="item" >商品1</view><view class="item" >商品2</view><view class="item" >商品3</view><view class="item" >商品4</view></view>.hold{width: 1rpx;height: 100%;float: left;}
微信scroll-view内部定位元素抖动问题
ios环境下,scroll-view标签里面如果有,position:absolute的元素。当scroll-view滑动的过程中,定位的元素会出现抖动的情况。
解决问题
把定位的元素从scroll-view拿出来。
<view class="box" ><scroll-view class="scroll_box" :scroll-y="true" ></scroll-view><view class="current" >我是定位元素</view></view>.box{position:relative;}.scroll_box{height:500px;overflow-y: auto;}.current{position:absolute;left:0;top:0;}
三、Android 问题
打开webview被微信拦截问题
分析问题
在微信小程序里开发webview h5的时候,在配置了合法域名,域名备案的情况下,出现了 ios 上正常打开,但是在 android 手机上出现了被拦截的情况。而且这些情况都是因为打开webview的 url中存在汉字的情况。
解决问题
安卓手机对于 http / https url如果存在汉字,需要用encodeURI对汉字进行编码处理就可以了。
<web-view :src="webViewUrl" @message="handerMessage" />this.webViewUrl = commonUrl + '/pages/goods/index?name=' + encodeURI('外星人')// 接口请求wx.request({url: commonUrl + '/pages/goods/index?name=' + encodeURI('外星人'),method: "GET",})
