无法用Canvas绘制一个合适的圆圈

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法用Canvas绘制一个合适的圆圈相关的知识,希望对你有一定的参考价值。

无论怎样,我都无法画出一个合适的圆圈。我总是得到一个椭圆形。这是示例代码,向您展示我的意思:

function canvasClicked(number) 
  var c = "canvas" + number;
  var canvas = document.getElementById(c);
  var context = canvas.getContext("2d");
  var centerX = 150;
  var centerY = 75;

  context.beginPath();
  context.arc(centerX, centerY, 70, 0, Math.PI * 2);
  context.lineWidth = 10;
  context.strokeStyle = "red";
  context.stroke();
#canvas1 
  width: 200px;
  height: 200px;
  border: 1px solid black;

       
<canvas id="canvas1" onclick="canvasClicked(1)"></canvas>

我试图找出问题的原因但没有任何成功。我知道centerX和centerY应该等于element.width / 2和element.height / 2但是这会给我带来更尴尬的结果,将椭圆移离盒子的中心。

答案

问题是这样的:

#canvas1 
  width: 200px;
  height: 200px;
  border: 1px solid black;

使用这个时:

<canvas id="canvas1" onclick="canvasClicked(1)"></canvas>

或者更确切地说:可见的css尺寸与底层画布尺寸不同。因为没有将它们设置为元素上的属性:

<canvas id="canvas1" onclick="canvasClicked(1)" width="200" height="200"></canvas>

将导致画布使用默认值300x150px。

但是:Kua zxsw指出


进一步参考:http://jsbin.com/geralevi/1/

注意:如果渲染效果看起来失真,请尝试在属性中明确指定宽度和高度属性,而不是使用CSS。

以上是关于无法用Canvas绘制一个合适的圆圈的主要内容,如果未能解决你的问题,请参考以下文章

为 Canvas 圆圈设置动画以在加载时绘制

画布圆圈未正确绘制[重复]

Android Canvas:仅在透明背景上绘制圆圈

用 Canvas 绘制飞线

SpriteKit - 用物理体绘制包含其他圆圈的圆圈

HTML5 Canvas 填充文本和字体