html - 所有 html Canvas 形状都被赋予最后添加的对象的颜色

标签 html canvas

我试图做一个奥林匹克类型的旗帜,纯粹是为了学习如何在 JavaScript 中绘制。这应该绘制两个圆圈 - 一个蓝色,一个黑色...... 这是代码(我对此表示歉意,一直在两个函数之间移动东西——不确定如何非明确地引用上下文):

function drawCircle(ctx,x,y,radius, color){
  var startAngle = 0;
  var endAngle = (Math.PI*2);
  var clockwise = true;
  ctx.fillStyle = color;
  ctx.arc(x,y,radius,startAngle,endAngle, clockwise);
  ctx.fill();
  ctx.closePath;
}
function drawCircles(){
    var canvas = document.getElementById('myCanvasArea');  
    var ctx = canvas.getContext('2d'); 
     if (canvas.getContext){    
        drawCircle(ctx,50,25,25, 'blue');
        drawCircle(ctx,100,25,25, 'black');
    }
}

我有两个黑色圆圈。我想我没有区分这两种形状,因此第 2 个的属性适用于第 1 个。

我该如何区分?我正在考虑让点击每一个都引发一个 Action 。我是否从一开始就错误地处理了这个问题?

最佳答案

这是因为您从未调用过 beginPath()!

function drawCircle(ctx,x,y,radius, color){
  var startAngle = 0;
  var endAngle = (Math.PI*2);
  var clockwise = true;
  ctx.fillStyle = color;
  ctx.beginPath(); // <-- Need me!!
  ctx.arc(x,y,radius,startAngle,endAngle, clockwise);
  ctx.fill();
  ctx.closePath;
}

因为您没有调用 beginPath,所以您正在绘制一个蓝色圆圈,然后您继续一条现在有两个圆圈(旧圆圈和新圆圈)的路径,然后绘制该路径(因此两个圆圈)都是黑色的!

相反,您想绘制一个蓝色圆圈,将其填充为蓝色,开始一条新路径,然后将那个圆圈绘制为黑色。

实时代码:

http://jsfiddle.net/5PDUb/1/

关于html - 所有 html Canvas 形状都被赋予最后添加的对象的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8457056/

相关文章:

ios - 在 iOS 上隐藏 HTML5 <video> 播放按钮

jquery - Bootstrap 轮播控件在单击后保持可见(应该获得不透明度 0)

html - 为什么我编辑表单长度的位置会阻止我在表单中输入信息?

javascript - 比使用 Bresenham 算法更好的线路选择?

html - 当有 22 个或更多元素时,为什么我的数组会转换为对象? ( Node )

javascript - Jquery 可调整大小仅适用于最近(最后)动态创建的 div

javascript - 当使用 "destination-in,"时,只有最后绘制的东西似乎会渲染

javascript - 如何将自定义形状变形/动画化为圆形? Canvas JS

javascript - 如何在新版本的fabricJS中解析getActiveObject()和getActiveGroup()?

javascript - 2D Canvas : specify `arc()` radius units