我正在开发一个使用 requestAnimationFrame 的游戏。这是代码。
Game.prototype.startLoop = function (arg) {
var parent = this;
(function tick() {
parent.update();
window.animationID = webkitRequestAnimationFrame(tick);
}());
};
Game.prototype.stopLoop = function () {
console.log('cancel the game now');
window.webkitCancelRequestAnimationFrame(window.animationID);
};
问题是我收到了消息,cancel the game now
但是游戏继续运行,因为 animationFrame 没有被取消。我已经尝试过webkitCancelAnimationFrame
, cancelAnimationFrame
,webkitCancelRequestAnimationFrame
和所有在我的浏览器中请求动画帧的版本:requestAnimationFrame
, webkitRequestAnimationFrame
. 这些组合都不起作用。
奇怪的是,如果我window.webkitCancelRequestAnimationFrame(window.animationID)
在 webkit 检查器控制台中运行,游戏会按预期停止。我将此代码添加window.webkitCancelRequestAnimationFrame(window.animationID); console.log('button test')
到 DOM 按钮的 onclick 属性中,当我单击它时游戏停止,但是当我执行 JS 时theDOMButton.click()
没有任何反应,但我确实收到消息“按钮测试”。
这是我的用户代理:
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
这是一个jsfiddle:
改成这个后:http: //pastebin.com/ewDXBT9C它可以工作,但我认为它很奇怪,因为请求动画应该停止而不需要在每个循环中检查一个变量