我正在一个基本的3D场景上使用ThreeJS,其中包含OrbitControls。一切都很好,但是即使用户没有查看它,它也在循环自身,导致整个网站变得非常缓慢。我想要一个函数,在满足某些条件时(在这种情况下,用户不查看画布),可以调用该函数来启动和停止渲染。我有一个起始函数,它工作得很好,但停止函数似乎不起作用,因为在ThreeJS初始化后,我的网站变得无法忍受地缓慢。
我已经寻找并尝试了几个“解决方案”,但由于某种原因它们不能与我的应用程序一起使用。我的假设是这些解决方案来自旧版本的ThreeJS。
以下是我在main.js文件中的代码:
我已经寻找并尝试了几个“解决方案”,但由于某种原因它们不能与我的应用程序一起使用。我的假设是这些解决方案来自旧版本的ThreeJS。
以下是我在main.js文件中的代码:
var scene,
camera,
controls,
render,
requestId = undefined;
function init() {
scene = new THREE.Scene();
var threeJSCanvas = document.getElementById("threeJS");
camera = new THREE.PerspectiveCamera( 75, threeJSCanvas.width / threeJSCanvas.height, 0.1, 1000 );
controls = new THREE.OrbitControls( camera );
// Controls and Camera settings
// Create Geometry.
}
function render() {
requestId = requestAnimationFrame(render);
renderer.render(scene, camera);
}
function start() {
render();
}
function stop() {
window.cancelAnimationFrame(requestId);
requestId = undefined;
}
在我的另一个JavaScript文件中,我的pageChange函数(这是一个多页面应用程序)内部有一个条件语句,如下所示:
if (page == 5) { // The page with the canvas on it
if (!locationsRendered) {
init();
locationsRendered = true;
}
} else { // If the page is not the page with the canvas on it
if (locationsRendered) {
stop();
}
}
locationsRendered
在第二个 JavaScript 文件中的本地作用域内较早地进行了初始化。
任何帮助都将不胜感激,因为我不能让这个简单的 3D 场景在加载后拖慢我的整个应用程序。这是不现实的。
controls.addEventListener( 'change', render );
。 - WestLangley