小程序-微信小程序踩坑记-1
onShow
的坑
微信小程序onShow
会仍然保存上一次进入小程序的参数值和场景值,所以如果需要在onShow
中做逻辑操作,需要进行区分。
其次,微信小程序发起转发和调起支付功能时,跳出了微信小程序范围,会触发onHide
和onShow
的操作。
兼容性问题
websocket
由于手机系统的问题。iOS会在小程序进入后台(或息屏)后大约5s就断掉了后台的所有操作,因此在小程序处于进入后台状态时检测到了
websocket
心跳发送失败后便执行关闭连接,但是息屏状态下不会立即执行关闭连接操作(onHide
也失灵了),而是在亮屏时处理操作栈内堆积的操作。而Android在进入后台(或息屏)后仍然会运行至大概5分钟(手机不同时间也不同),但Android会暂停小程序的
setInterval
函数运行。所以小程序回到前台后,iOS系统需要进行重连操作,而Android系统只需要重新运行
setInterval
函数。websocket
可以同时维护5个,需要在创建成功后进行一系列监听,如果回收使用了旧的socketTask
不能再次进行监听函数挂载,否则会响应多次监听函数操作。css
动画旋转动画
transtion: rotate(180deg)
,Android和iOS表现不一致,如果动画旋转角度为360°时,iOS真机则会直接显示为末状态,而Android能够正常显示,当旋转角度不为360°的倍数时,iOS会旋转到末状态最小的角度,Android正常显示,所以会出现iOS和Android旋转方向和旋转角度不一致问题。使用
wx.createAnimation
依旧解决不了问题,可旋转范围为[-180, 180]。解决方案:使用
setInterval
去循环调用旋转,但是主要问题是旋转方向可能不一致。onLoad() { this.data.spinAnimation = wx.createAnimation({ duration: 1400, timingFunction: 'linear', // "linear","ease","ease-in","ease-in-out","ease-out","step-start","step-end" delay: 0, transformOrigin: '50% 50% 0', success: function(res) { console.log(res) } }) }, handleSpinAni() { const ani = this.data.spinAnimation let n = 1 this.interval = setInterval(() => { ani.rotate(180*(n)).step() console.log("rotate=="+n) this.setData({ ['ani.spin']: ani.export() }) n += 1 if (n === 5) { clearInterval(this.interval) } }, 1400) }
渲染问题
控制只有一次动效的gif
图片,缓存问题
前端开发通用方法,解决缓存问题。当GIF
图片的组件已经渲染后,再次显隐或者用v-if
控制组件挂载的问题,因为缓存,第一次真是后不会触发GIF
图片的动效再次展示,因此使用后缀携带参数的方式解决。如:/static/icons/bg.gif?123
滚动问题
-webkit-overflow-scrolling: touch;
overflow-x: auto;