一、通用问题
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",
})