以百分比设置画布元素不会设置必须以绝对像素设置的实际画布大小。这里发生的是你得到一个默认大小的画布,然后被 html 渲染拉伸,看起来模糊。
因此,您需要使用 f.ex 设置大小。以绝对像素为单位的窗口大小。
你可以这样做(这里的小提琴更新:http: //jsfiddle.net/x5LpA/3/) -
创建一个根据窗口大小设置画布大小的函数(您当然需要减去条的高度等,但要显示原理):
function initCanvasArea(cnv) {
cnv.width = window.innerWidth;
cnv.height = window.innerHeight;
}
由于在重新调整画布大小时画布内容会被清除,因此您需要每次重新渲染内容。因此,将渲染内容提取到像 f.ex 这样的单独函数中会很聪明:
function renderCanvas(ctx) {
ctx.fillStyle = "rgb(200,0,0)";
ctx.fillRect(0, 0, 55, 50);
ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
ctx.fillRect(20, 20, 55, 50);
}
现在,让 main 函数成为一个自调用函数,您还可以在其中附加一个用于windo.resize 的事件处理程序以更新画布:
$(function () {
var canvas = $('#le_canvas')[0];
var ctx = canvas.getContext('2d');
initCanvasArea(canvas);
renderCanvas(ctx);
window.onresize = function(e) {
initCanvasArea(canvas);
renderCanvas(ctx);
};
})();
最后通过删除设置为 100% 的宽度/高度来编辑 CSS 规则;
#le_canvas {
position:absolute;
}
(提示:这里更好的方法是使用fixed
位置属性 - 加上使用包装元素、填充、框大小......但这超出了这个问题的范围)。