代码调试的过程中发现,页面销毁时动画不会结束,也就是lottie不能自动销毁requestAnimationFrame回调里的动画,于是我手动收集了动画id,在页面onUnload时cancelAnimationFrame,以为这样问题能解决,结果不行,并且发现第二次进入页面时,requestAnimationFrame再也不触发了,于是手动收集上一次动画的回调传入,问题解决。 代码片段: let frameFn = function () { }; let rid = 0; let canvasDom = null; page({ onReady () { wx.createSelectorQuery().select('#canvas').node((res) => { const canvas = res.node; const requestAnimationFrame = canvas.requestAnimationFrame; canvas.requestAnimationFrame = function () { frameFn = arguments[0]; rid = requestAnimationFrame.apply(canvas, arguments); return rid; } // 页面第二次打开时动画默认不会开始,这里需要手动调用一次动画 canvas.requestAnimationFrame(frameFn); canvasDom = canvas; lottie.setup(canvas); lottie.loadAnimation({ autoplay: true, loop: true, animationData: openCardAnimationData, rendererSettings: { context: canvas._ctx } }); }).exec(); }, onUnload () { // 销毁页面时 关闭动画 canvasDom.cancelAnimationFrame(rid); } })
lottie-miniprogram 动画 切换页面后再初始化就不动了用lottie-miniprogram 做上拉刷新的动画效果 一开始可以动,切换页面后则无法播放动画。。。。。
2020-04-21代码调试的过程中发现,页面销毁时动画不会结束,也就是lottie不能自动销毁requestAnimationFrame回调里的动画,于是我手动收集了动画id,在页面onUnload时cancelAnimationFrame,以为这样问题能解决,结果不行,并且发现第二次进入页面时,requestAnimationFrame再也不触发了,于是手动收集上一次动画的回调传入,问题解决。 代码片段: let frameFn = function () { }; let rid = 0; let canvasDom = null; page({ onReady () { wx.createSelectorQuery().select('#canvas').node((res) => { const canvas = res.node; const requestAnimationFrame = canvas.requestAnimationFrame; canvas.requestAnimationFrame = function () { frameFn = arguments[0]; rid = requestAnimationFrame.apply(canvas, arguments); return rid; } // 页面第二次打开时动画默认不会开始,这里需要手动调用一次动画 canvas.requestAnimationFrame(frameFn); canvasDom = canvas; lottie.setup(canvas); lottie.loadAnimation({ autoplay: true, loop: true, animationData: openCardAnimationData, rendererSettings: { context: canvas._ctx } }); }).exec(); }, onUnload () { // 销毁页面时 关闭动画 canvasDom.cancelAnimationFrame(rid); } })
扫码进入小程序后退出再进入后不执行lottie-miniprogram?使用lottie-miniprogram,在真机上扫码进入小程序执行动画没问题,点击右上角按钮退出再扫码进去的话动画就卡住不动了,这个插件好鸡肋啊,官方能解决不
2020-04-21