[英]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.