【发布时间】:2016-02-13 00:22:52
【问题描述】:
cancelAnimationFrame() 在对象的方法中调用时似乎不起作用。我尝试将this 值绑定到回调函数(as demonstrated on MDN 和setTimeout),但是在使用cancelAnimationFrame() 时收到了TypeError。然后我尝试将this 值设置为名为@987654327@ 的局部变量并再次调用cancelAnimationFrame()。那个时候,我没有收到错误,但动画本身仍在播放。如何取消动画?
我在下面重现了我遇到的问题。如果你打开一个控制台窗口,你会看到动画还在运行。
function WhyWontItCancel() {
this.canvas = document.createElement("canvas");
this.canvas.width = 200;
this.canvas.height = 10;
document.body.appendChild(this.canvas);
this.draw = this.canvas.getContext("2d");
this.draw.fillStyle = "#f00";
this.position = 0;
};
WhyWontItCancel.prototype.play = function() {
if (this.position <= 190) {
this.draw.clearRect(0, 0, 400, 10);
this.draw.fillRect(this.position, 0, 10, 10);
this.position += 2;
} else {
//window.cancelAnimationFrame(this.animation.bind(this));
var _this = this;
window.cancelAnimationFrame(_this.animation);
console.log("still running");
}
this.animation = window.requestAnimationFrame(this.play.bind(this));
};
var animation = new WhyWontItCancel();
animation.play();
【问题讨论】:
标签: javascript constructor bind requestanimationframe cancelanimationframe