使画布像父母一样宽和高

时间:2012-04-18 17:40:22

标签: javascript html css html5 canvas

我想制作一个矩形画布来模拟进度条 但是当我将画布的宽度和高度设置为100%时,它似乎并没有真正使它像父母一样高和宽

请参阅下面的示例
http://jsfiddle.net/PQS3A/

甚至可以制作非方形帆布? 我不想硬编码画布的高度和宽度,因为它应该在更大或更小的屏幕(包括移动设备)中查看时动态变化

3 个答案:

答案 0 :(得分:100)

这是一个解决问题的工作示例:

http://jsfiddle.net/PQS3A/7/

你的例子有几个问题:

  1. <div>没有heightwidth属性。你需要通过CSS设置它们。
  2. 即使div的大小正确,它也使用默认的position:static,这意味着它不是任何子级的定位父级。如果您希望画布与div的大小相同,则必须将div设置为position:relative(或absolutefixed)。
  3. “画布”上的widthheight属性指定要绘制的数据的像素数(如图像中的实际像素数),并与显示大小<分开画布的/ em>这些属性必须设置为整数。
  4. 上面链接的示例使用CSS设置div大小并使其成为定位父级。它创建一个JS函数(如下所示),将画布设置为与其定位的父元素相同的 display 大小,然后调整内部widthheight属性,以便它与显示的像素数相同。

    var canvas = document.querySelector('canvas');
    fitToContainer(canvas);
    
    function fitToContainer(canvas){
      // Make it visually fill the positioned parent
      canvas.style.width ='100%';
      canvas.style.height='100%';
      // ...then set the internal size to match
      canvas.width  = canvas.offsetWidth;
      canvas.height = canvas.offsetHeight;
    }
    

答案 1 :(得分:7)

如果您希望它实际上与父元素一样大,请使用画布的widthheight属性。您可以使用JQuery设置它们。

$(document).ready(function() {
  var canvas = document.getElementById("theCanvas");
  canvas.width = $("#parent").width();
  canvas.height = $("#parent").height();
});

如果您不知道JQuery,请使用以下Javascript:

var canvas = document.getElementById("theCanvas");
var parent = document.getElementById("parent");
canvas.width = parent.offsetWidth;
canvas.height = parent.offsetHeight;

如果您使用css高度和宽度属性style="width:100%; height:100%;",那么您只是拉伸画布。这将使您在画布上绘制的所有内容看起来都很拉伸。

JSFiddle用于JQuery解决方案。

JSFiddle用于Javascript解决方案。

答案 2 :(得分:0)

在标签上使用CSS属性而不是属性:

<div style="background-color:blue;width:140px;height:20px">
    <canvas style="background-color: red;width:100%;height:100%">
    </canvas>
</div>​

That seems to work