微信小程序踩坑记录
小程序Video组件
问题1
编写重播功能的时候,对于少于两个故事的视频进行重播的时候,因为两个故事已经被加载过了,这时候重新设置fileList不会触发bindprogress事件,所以使用seek方法返回到视频开头然后再进行播放。发现安卓seek方法结束之后,进行手动播放,视频不会继续播放(会自动暂停)。但是ios没有这个问题。
解决方法:
ios使用seek(0)加play()。
android使用stop()加play()
ios不使用stop是因为之前用过stop导致无法使用play()进行播放,原因不明。
小程序自定义分析功能
使用小程序自定义分析功能的时候,当需要进行保存和测试的时候,需要使用开发版进行测试并回传数据,而不是线上版和体验版。一般来讲自定义分析不要用来记录很难人为触发的错误,因为很难通过。
小程序使用lottie
官方的使用指南:https://developers.weixin.qq.com/miniprogram/dev/extended/utils/lottie.html
踩了一个坑,就是改变了一些顺序
wx.createSelectorQuery().select('#canvas').node(res => {
const canvas = res.node
lottie.setup(canvas)
canvas.width = 50
canvas.height = 50
const context = canvas.getContext('2d')
lottie.loadAnimation({
loop: false,
autoplay: false,
animationData; animData,
rendererSettings: {
context
}
})
}).exec()
这时候会报一个错误: cannot set property fill of [object webGL Canvas Context2d] which has not set property
感觉上就是lottie.setup(canvas)会冻结canvas属性(可能是Object.freeze)的设置,所以如果需要修改canvas的属性,在调用setup函数之前进行修改。也就是:
wx.createSelectorQuery().select('#canvas').node(res => {
const canvas = res.node
canvas.width = 50
canvas.height = 50
const context = canvas.getContext('2d')
lottie.setup(canvas)
lottie.loadAnimation({
loop: false,
autoplay: false,
animationData; animData,
rendererSettings: {
context
}
})
}).exec()
小程序onAudioInterruptionEnd的问题
安卓在隐藏之后,如果当前没有播放的媒体,那么后面页面回到前台的时候,不会触发onAudioInterruptionEnd。IOS在隐藏之后,如果当前没有播放的媒体,那么后面页面回到前台的时候,会触发onAudioInterruptionEnd。
小程序seek的问题
试了一下,小程序的seek要在播放的时候才能用。其余情况好像无效。
小程序textarea自动拉起键盘的问题
通过focus去控制textarea渲染出来的时候自动拉起键盘。发现ios在第一次显示的时候,会出现先触发blur再触发focus的问题。导致focus值出现异常,后面的自动拉起键盘一直就无法调起来了(手动点击输入框可以恢复)。
解决方案:在设置参数让textarea显示的时候,过一段时间(200ms)再让focus为true。
小程序hidden的实现
hidden在样式表里面的实现为:
<view hidden></view>
view[hidden] {
display: none;
}
因为是标签结合属性,所以权重为0011, 很容易就被style和类覆盖。
ui-app中使用的v-show,实际上不是vue的v-show,还是小程序的hidden,所以使用上可能会有疑惑