使用JavaScript和Canvas绘制形状

时间:2012-04-14 22:55:52

标签: javascript html html5 canvas shapes

我正在尝试使用HTML 5 canvas和JavaScript生成和绘制形状。我试图让它尽可能干,但有一些问题。我的代码如下:

var sections = {
  "w_end" : {
    "name":"W End",
    "id":"w_end",
    "dimensions": {"move_to":[0,0], "coords":[[0,50], [50,50], [0,50]]}
  }
}
$(document).ready(function() {
  $.each(sections, function(k,v){
    make_shape(k, v);
  })
});

function make_shape(id, attributes) {
  var holder = document.getElementById('room');
  var grid_canvas = document.createElement("canvas");
  holder.appendChild(grid_canvas);
  grid_canvas.setAttribute("id", id);
  var item = grid_canvas.getContext("2d");
  item.fillStyle = "rgb(154,250,50)";
  item.beginPath();
  item.moveTo(attributes.dimensions.move_to[0],attributes.dimensions.move_to[1]);
  $.each(attributes.dimensions.coords, function(k ,v){
    item.lineTo(v[0],v[1]);
  });
  item.fill();
  item.closePath();
}

从json中提取lineTo值时,这似乎不起作用。我可以在lopp中切换lineTo(v[0],v[1]) lineTo(50,75)并生成填充形状。你可以告诉我,我不擅长JavaScript。有谁知道这里的问题是什么,并且可能会提供一些关于从某种列表生成多个形状的建议?

干杯

1 个答案:

答案 0 :(得分:2)

我玩了你的代码,它完美无瑕。没有绘制三角形,因为某种程度上回到自身的路径什么都没有。只放置前两个顶点就可以了。

"dimensions": {"move_to":[0,0], "coords":[[0,50], [50,50]]}

看到这个小提琴:http://jsfiddle.net/Nm7UQ/

请注意,我注释掉了document.ready