Javascript 我的canvas子类如何处理window.resize事件?
我有一个canvas包装器类,当它被调整到完全响应时,需要运行一些代码。当然,HTMLCanvasElement没有调整大小事件;只有窗户可以。我的代码如下所示:Javascript 我的canvas子类如何处理window.resize事件?,javascript,events,html5-canvas,resize,this,Javascript,Events,Html5 Canvas,Resize,This,我有一个canvas包装器类,当它被调整到完全响应时,需要运行一些代码。当然,HTMLCanvasElement没有调整大小事件;只有窗户可以。我的代码如下所示: class CanvasThing { constructor(whichCanvas) { ... } handleResize() { this.recalculateStuff(); } } var foo = new CanvasThing(document.g
class CanvasThing {
constructor(whichCanvas) {
...
}
handleResize() {
this.recalculateStuff();
}
}
var foo = new CanvasThing(document.getElementFromID("bar"));
现在,我想把它放在我的类的构造函数中,使所有内容都是自包含的:
window.addEventListener("resize", this.handleResize, false);
但是当它调用handleResize时,这个
被设置为窗口,而不是实例,因此handleResize()
将不起作用,因为它无法访问类中的任何其他方法
好的,好的,在初始化foo
之后,我将在全局级别执行此操作:
window.addEventListener("resize", foo.handleResize, false);
但是仍然这个
指向窗口,因此没有简单的方法访问我的类的实例
当然,我可以通过让resize事件迭代页面上的所有类实例并触发它们的resize事件,将其硬连接到周围的代码中,但这似乎太不雅观了。将计时器设置为持续运行,以检查画布是否已调整大小,这似乎更为重要
有没有一种现代化的方法来处理这类事情,使我的包装器对象尽可能独立?多亏了TMDesigner的评论。绑定是一条路:
class CanvasThing {
constructor(whichCanvas) {
this.boundResize = this.handleResize.bind(this);
window.addEventListener("resize", this.boundResize, false);
...
}
handleResize() {
this.recalculateStuff();
}
}
这使包装器能够完全独立且优雅。您是否尝试过使用.bind(This)并将函数传递给侦听器?我没有。。。真管用!我从来没用过。绑定过。谢谢你的提示!很乐意帮忙,托比鲁斯。