【发布时间】:2015-05-28 20:30:26
【问题描述】:
我想将 HTML5 画布与 flexbox 一起使用。当用户调整窗口大小时,我需要自动设置 canvas.width 和 canvas.height。我已经尝试使用 jQuery:
$(".cnvs").attr("width", $(".cnvs").width());
$(".cnvs").attr("height", $(".cnvs").height());
但它会不断增加画布的实际宽度,因此它几乎填满了整个屏幕。我已经输入了it on jsfiddle - 尝试使用分隔符调整输出窗口的大小。
有什么合理的方法吗?谢谢。
编辑:明确一点:我不想用该画布填满整个屏幕。我想要 UI:
<div class="container">
<div class="control"></div>
<canvas></canvas>
<div class="control"></div>
</div>
然后使用 flexbox 将这三个元素并排放置,而 canvas 将是另一个元素的两倍宽。这没有问题,但 canvas.width 和 canvas.height 没有得到更新,所以每当我在画布上渲染一些东西时,它都会被渲染为画布是 320x140 像素。
编辑2:很抱歉,但是(可能是因为我的英语不好)我不够清楚。我会再解释一遍:
只有使用 flexbox,canvas 元素的实际宽度才是正确的(即使不使用任何 JavaScript 代码)。我的问题是,虽然宽度是正确的(并且$(".cnvs").width() 返回正确的宽度值),但它没有任何“宽度”属性,它仍然是:
<canvas>
</canvas>
而且我需要自己提供宽度参数(因为它在未设置时渲染很糟糕)。当我尝试使用我的代码或建议时:
...
var rect = canvas.parentNode.getBoundingClientRect();
canvas.width = rect.width;
canvas.height = rect.height;
...
它的行为很奇怪,画布的宽度随着每次调整大小而不断增加,但太多了(它几乎立即删除了两个控制 div)。
【问题讨论】:
标签: javascript jquery html css canvas