乐闻世界logo
搜索文章和话题

How do I stop requestAnimationFrame

5 个月前提问
4 个月前修改
浏览次数39

1个答案

1

在使用ThreeJS进行动画渲染时,通常会使用requestAnimationFrame来持续更新渲染画面。如果需要在某些情况下停止动画,可以通过取消requestAnimationFrame来实现。

首先,每次调用requestAnimationFrame时,它都会返回一个独特的ID。你可以使用这个ID通过调用cancelAnimationFrame来停止动画。以下是具体的步骤和代码示例:

  1. 保存requestAnimationFrame的ID: 当你调用requestAnimationFrame时,确保将返回的ID保存在一个变量中。这样你就可以在需要的时候使用这个ID来停止动画。

  2. 调用cancelAnimationFrame来停止动画: 当你想停止动画时,可以使用之前保存的ID调用cancelAnimationFrame。这将停止进一步的动画帧调用。

示例代码:

假设我们有一个简单的动画循环,我们想在用户按下某个键后停止这个动画。

javascript
let frameId; // 用于存储requestAnimationFrame的ID function animate() { frameId = requestAnimationFrame(animate); // 这里是你的渲染代码 render(); } function stopAnimation() { cancelAnimationFrame(frameId); } function render() { // 这里是你的渲染逻辑,例如更新物体位置、相机视角等 renderer.render(scene, camera); } // 开始动画 animate(); // 假设我们监听键盘事件来停止动画 window.addEventListener('keydown', (event) => { if (event.key === 's') { // 如果用户按下's'键 stopAnimation(); } });

在这个示例中,我们首先定义了一个animate函数来循环调用自己,从而形成一个动画循环。animate函数在每次执行时都会调用requestAnimationFrame并将返回的ID存储在frameId变量中。当用户按下's'键时,stopAnimation函数会被触发,使用cancelAnimationFrame和之前存储的frameId来停止进一步的动画帧调用。

这种方法可以很好地控制动画的开始和停止,适用于需要动态控制ThreeJS动画渲染的情况。

2024年6月29日 12:07 回复

你的答案