画布元素的绘制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宽度并将画布API设置为或设置为任意数量的像素。 jquery $(window).width()为我们提供了100%的像素数。
发表一段代码让我们看看或做小提琴 – Richa 2014-09-05 09:47:58
我认为这只是画布的行为。如果您放入的图像与您的画布尺寸不同,它会缩放并拉伸。我想.. – 2014-09-05 10:05:14
我的画布是一个国家的互动地图。用户可以缩放和移动该地图。所以我希望这幅画布尽可能大,并且里面的地图尺寸相同。 – 2014-09-05 10:10:17