HTML5中的画布并创建多个圆圈

时间:2013-04-18 16:09:36

标签: html5 canvas

根据w3c学校对画布的解释,我理解创建形状......

<script>
  var canvas = document.getElementById('myCanvas');
  var context = canvas.getContext('2d');
  var centerX = canvas.width / 2;
  var centerY = canvas.height / 2;
  var radius = 20;

  context.beginPath();
  context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);
  context.fillStyle = 'green';
  context.fill();
  context.lineWidth = 5;
  context.strokeStyle = '#003300';
  context.stroke();
</script>

这将使我的画布成为绿色圆圈。

<canvas id="myCanvas"></canvas>

但是 - 我想将“圈子”应用到页面上的多个位置,并且通过ID执行此操作将是荒谬的。

如何将上下文(如上所定义)应用于多个画布?我假设使用类,这似乎是合乎逻辑的方式。

<canvas class="redDot"></canvas>
<canvas class="redDot"></canvas>
<canvas class="redDot"></canvas>

<canvas class="greenDot"></canvas>
<canvas class="greenDot"></canvas>

<canvas class="blueDot"></canvas>
<canvas class="blueDot"></canvas>
<canvas class="blueDot"></canvas>

1 个答案:

答案 0 :(得分:0)

您必须遍历每个元素才能应用更改。即:

var dots = document.getElementsByClassName('dots');
for (var i=0;i<dots.length;i++){
    var canvas = dots[i];
    var context = canvas.getContext('2d');
    // Draw circles here 
}

理想情况下,您只能拥有一个可以绘制多个圆圈的画布元素

var canvas = document.getElementById('myOneAndOnlyCanvas');
// Using CSS and layering can make background
var context = canvas.getContext('2d');

dot('red',50,50);
dot('blue',100,50);
//etc..

function dot(color,x,y){
  context.beginPath();
  context.arc(y, y, radius, 0, 2 * Math.PI, false);
  context.fillStyle = color;
  context.fill();
  context.lineWidth = 5;
  context.strokeStyle = '#003300';
  context.stroke();
}

但如果这不适合您的用例,那么使用SVG对象呢?

既然你提到了w3学校:http://www.w3schools.com/svg/ 但理想情况下请查看:http://www.w3.org/Graphics/SVG/

介意,Dom Heavy页面会严重影响加载时间。根据你想要做的事情,使用图像(例如,一大群点)可能更明智。