[英]Resizing HTML5 canvas via a class method in response to a resize event
我试图通过resizeCanvas()
方法调整画布元素的大小,以响应resize事件。 如果直接调用类方法,画布将调整大小,但是在随后通过事件处理程序的调用中,我将收到以下错误: Uncaught TypeError: Cannot set property 'width' of undefined
这是我的测试代码:
class CanvasManager { constructor(canvasID) { this.canvas = document.getElementById(canvasID); this.context = this.canvas.getContext('2d'); } resizeCanvas() { this.canvas.width = window.innerWidth-30; this.canvas.height = window.innerHeight-30; window.scrollTo(0, 0); } } let canvasManager = new CanvasManager('controller'); canvasManager.resizeCanvas(); window.addEventListener("resize", canvasManager.resizeCanvas);
<!DOCTYPE html> <html> <head></head> <body> <canvas id="controller" style="border-style: solid;" width="300px" height="300px"></canvas> <script src="./test.js"></script> </body> </html>
有任何想法为什么我会收到错误?
编辑:正如Heretic Monkey
指出的,此问题类似于JavaScript类方法中未定义的“ this” 。 但是,作为新的编码器,我永远都不会想到这两个问题是相关的。 我认为该帖子应该保留,以防其他人遇到类似问题而无法找出根本问题。
我认为是因为this
的上下文。 请尝试更换:
window.addEventListener("resize", canvasManager.resizeCanvas);
附:
window.addEventListener("resize", canvasManager.resizeCanvas.bind(canvasManager));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.