javascript - 为什么 cancelAnimationFrame 不起作用?

标签 javascript html animation requestanimationframe

引用这个 fiddle - http://jsfiddle.net/rnqLfz14/28/

[此代码不是我的 - http://www.isaacsukin.com/news/2015/01/detailed-explanation-javascript-game-loops-and-timing ]

//....

function stop() {
    running = false;
    started = false;
    cancelAnimationFrame(frameID);
}

//...

function mainLoop(timestamp) {
    // Throttle the frame rate.
    if (timestamp < lastFrameTimeMs + (1000 / maxFPS)) {
        frameID = requestAnimationFrame(mainLoop);
        return;
    }
    delta += timestamp - lastFrameTimeMs;
    lastFrameTimeMs = timestamp;

    begin(timestamp, delta);

    if (timestamp > lastFpsUpdate + 1000) {
        fps = 0.25 * framesThisSecond + 0.75 * fps;

        lastFpsUpdate = timestamp;
        framesThisSecond = 0;
    }
    framesThisSecond++;

    var numUpdateSteps = 0;
    while (delta >= timestep) {
        update(timestep);
        delta -= timestep;
        if (++numUpdateSteps >= 240) {
            panic();
            break;
        }
    }

    draw(delta / timestep);

    T.textContent = timestamp;

    if (timestamp >= 6000.0) {
        T.textContent = "Stopped!";
        stop();
    }

    end(fps);

    frameID = requestAnimationFrame(mainLoop);
}
//...

cancelAnimationFrame 函数没有停止动画循环。有什么建议吗?我已经摸索了很长时间了,请提出任何建议,我们将不胜感激。

最佳答案

当满足 stop() 的条件时,将调用 stop() 但代码会继续执行,因此将请求新的 rAF。

只需在 stop 调用后添加一个 return 来防止这种情况发生(或使用 else):

...
if (timestamp >= 6000.0) {
    T.textContent = "Stopped!";
    stop();  // stop() is just a sub-routine here and will continue after being called
    return;  // <--- here
}
...

Modified fiddle

关于javascript - 为什么 cancelAnimationFrame 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30290404/

相关文章:

javascript - 使用jquery判断复选框是否被选中

javascript - 从 XHR 请求中获取 BLOB 数据

javascript - 需要从被单击的任何元素获取信息,但不是从父元素获取信息

android - 只希望一个 Sprite 动画,而不是他们都这样做。和引擎

C# WebBrowser - 如何摆脱 JavaScript 错误提示?

javascript - 刷新并填充动态添加的行

javascript - html5 预览中的图像方向错误

html - 如何在浏览器中以正确的顺序显示我的 div?

angular - 在表单错误时触发 Angular 动画

ios - UIViewAnimationOption重复完成?