两个问题:
1)您正在使用 CSS 规则设置画布的宽度。这不会很好地工作。如果您没有为画布设置大小,则无论您通过 CSS 设置什么,它都会默认为 300 x 150 像素。这意味着其中的所有内容都被缩放(就好像它是一个固定大小的图像,基本上就是画布)。如果您确实设置了大小但仍使用 CSS,则该大小将被缩放。
您会失去性能和质量,并且还需要重新计算鼠标位置。
您需要从 Javascript 更新大小。
#canvas, #canvasCursor {
cursor: none;
background: #fff;
position: absolute;
left: 50px;
top: 30px;
width: 62%; /* REMOVE */
height: 80%; /* REMOVE */
z-index: 1;
}
2)您不会从任何地方更新画布大小。您可以通过设置其宽度和高度属性来更新画布 - 将其设置为您可以使用的窗口大小:
window.onresize = function() {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
//call redraw
}
或者,如果要将其设置为百分比,则需要自己计算,因为画布不采用 % 值。
window.onresize = function() {
canvas.width = window.innerWidth * 0.62; //ie. 62% of width
canvas.height = window.innerHeight * 0.8; //ie. 80% of height
//call redraw
}
Canvas 仅使用像素大小,因为此元素是一种特殊情况。
为什么是innerWidth/Height?这代表了您看到的窗口的实际视口(您将使用移动设备更清楚地看到这一点)。
如果你只想要一个固定的大小,你可以直接设置:
canvas.width = 800;
canvas.height = 600;
为什么需要更新(重绘所有内容)?Canvas 只保存绘制到它的任何内容的快照 - 它不保留它的副本。屏幕上显示的是它。
调整大小时,它会重新初始化,因此您需要再次更新它。除非您有很多东西要重绘,否则这将几乎没有性能成本。这只会在用户调整浏览器窗口大小时发生。