设置画布宽度100%和最大宽度

时间:2014-09-05 09:47:12

标签: javascript css html5 canvas

我想将宽度设置为100%并将其最大宽度限制为我的canvas元素。无论画布宽度如何,我都希望拥有静态画布高度。 但是当我用css设置它时,似乎浏览器使用标准siza绘制画布并将画布重新调整为100%宽度,并且它会调整高度。但最糟糕的是它会缩放画布内的画面。我也尝试从JS设置canvas的css width属性,但它导致了相同的结果。

<canvas id="myCanvas" width="100%" height="630px"></canvas>

制作宽度为100px,高度为630px的画布

<canvas id="myCanvas"></canvas>

和css

#myCanvas {
    width:100%;
    height:630px;
}

使画布100%宽度 但比例调整高度 并在画布内缩放图像。 用JS设置css也是一样的。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

canvas元素的绘图API尺寸不需要与屏幕上占用的CSS尺寸相匹配。如果需要的话,这允许人们进行子像素图形(以创建具有抗锯齿的平滑运动)。所以100%的画布宽度意味着它没有想要它应该使用的像素数,我相信你得到的默认宽度为400,好像根本没有使用宽度。但是,可以使用javascript将其更改为您想要的任何宽度。

var canvas = document.getElementsByTagName('canvas')[0];
canvas.width  = $(window).width(); 
canvas.height = 630;

或者做抗锯齿。

var canvas = document.getElementsByTagName('canvas')[0];
canvas.width  = $(window).width()*2; 
canvas.height = 630*2;

将画布宽度设置为高于屏幕上空间的数字。每个画布像素只占实际像素的1/2,运动看起来更像视频。

更新添加的jsfiddle

http://jsfiddle.net/juaovd7o/

<canvas id="myCanvas" width="284px" height="120px">hello</canvas>
<canvas id="myCanvas2" style="width:284px;height:120px;"></canvas>
<img src="http://whitedove-coding.com/static/whitedove-829.png" id="dove">

 var canvas = document.getElementById('myCanvas');
      var context = canvas.getContext('2d');
      context.beginPath();
      context.rect(0, 0, 284, 120);
      context.lineWidth = 4;
      context.strokeStyle = 'black';
      context.stroke();
 var canvas2 = document.getElementById('myCanvas2');
      canvas2.width=568;
      canvas2.height=240;
      var context2 = canvas2.getContext('2d');
      context2.beginPath();
      context2.rect(0, 0, 568, 240);
      context2.lineWidth = 4;
      context2.strokeStyle = 'black';
      context2.stroke();
var img=document.getElementById("dove");
      context2.drawImage(img,0,0);
      context.drawImage(img,0,0);

如果没有通过其他方式设置宽度attrib将设置css和API宽度,但100%宽度对API无效,因此API回退到其默认宽度400px。

根据您的问题,您需要使用100%的CSS宽度并将canvas API设置为或将设置为任意数量的像素? jquery $(window).width()给出了100%的像素数。