个人亲测,方法有效!
bug原因(均为个人猜测,有不同意见欢迎评论区提出):
我们在创建threejs 3D场景时,往往会有这么一个函数:
render () {
requestAnimationFrame(this.render)
this.renderer.render(this.scene, this.camera)
}
其中 requestAnimationFrame(this.render) 会让render函数不停地自身调用自身,即使切换到不同的vue页面,依然在执行。再切回来时,又会有新的render函数被定义且不停地调用自身。这时一个场景同时被两个render函数渲染,来回切换多次后render函数会依次增多。最后导致页面模型动画疯狂掉帧的bug。
解决思路:
基于bug原因的猜想,只需要保证,在切出当前vue页面后,render函数不再自身调用自身来渲染场景就行了。
解决方法:
定义一个变量,来控制render函数里面的内容是否执行。并且在 beforeDestroy 钩子函数(离开当前vue页面会被立即调用)里面更改变量值,使render函数的内容不被执行。
这是更改后的render函数代码:
beforeDestroy () {
this.stopRender = true
}
methods:
render () {
if (!this.stopRender) {
requestAnimationFrame(this.render)
this.renderer.render(this.scene, this.camera)
}
}