[英]Center a circle in a canvas with a % width
如果画布的宽度%如%33.3333(想法是彼此相邻有3个),则似乎无法在画布的中心绘制一个圆圈。
为什么是这样? http://jsfiddle.net/n302nsbh/2/
的HTML
<div id="test">
<canvas class="myCanvas"></canvas>
</div>
的CSS
.myCanvas {
width: 33.3333333333%;
display: inline-block;
background-color: red;
}
JS
var canvas = $('.myCanvas');
canvas.width = canvas.width();
canvas.height = canvas.height();
var context = canvas.get(0).getContext('2d');
var centerX = canvas.width / 2;
var centerY = canvas.height / 2;
var radius = canvas.height/2;
context.beginPath();
context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);
context.fillStyle = 'blue';
context.fill();
context.lineWidth = 5;
context.strokeStyle = '#003300';
context.stroke();
您的问题是canvas
变量不是您的canvas对象,而是一个jQuery实例,因此,当您设置width和height属性时,它们不能正确地通过jQuery到达您的实际canvas元素。
将您的第一行更改为:
var jQCanvas = $('.myCanvas');
var canvas = jQCanvas[0];
canvas.width = jQCanvas.width();
canvas.height = jQCanvas.height();
// etc.
这是一个固定的小提琴: http : //jsfiddle.net/rgthree/n302nsbh/8/
就像其他人提到的那样,您可以将lineWidth
从您的半径偏移,以确保它在屏幕上都包括边界在内。 我已将其添加到小提琴中,但这并不是它没有居中的真正原因。
问题是jQuery无法正确计算canvas元素的宽度和高度。 在您的情况下,我认为使用document.querySelector
而不是$
会更好。 两者都具有相似的功能,但是document.querySelector
是本机的,这意味着您无需包括整个jQuery即可完成这件事。 document.querySelector
返回一个DOM对象,该对象没有width
和height
方法,但是具有width
和height
属性。
更正的代码:
var canvas = document.querySelector(".myCanvas");
var context = canvas.getContext('2d');
var centerX = canvas.width / 2;
var centerY = canvas.height / 2;
var radius = canvas.height /2;
另请参见固定小提琴 。
canvas元素非常类似于图像,只是因为您更改了可见宽度并不意味着您更改了内部尺寸(并且您没有)
http://jsfiddle.net/n302nsbh/7/
该示例有效,因为它忽略了将其缩放到33%的情况。
var canvas = $('.myCanvas');
var context = canvas.get(0).getContext('2d');
var centerX = canvas.get(0).width / 2;
var centerY = canvas.get(0).height / 2;
var radius = canvas.get(0).height/2;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.