微信小程序踩坑记录

2021-07-14  本文已影响0人  CRJ997

小程序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,所以使用上可能会有疑惑

上一篇下一篇

猜你喜欢

热点阅读