2012-04-14 176 views
1

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

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值的时候。我可以将lineTo(v[0],v[1])替换为lineTo(50,75),它会生成一个填充的形状。你可以说,我对JavaScript并不擅长。有没有人知道这里的问题是什么,也许给出一些关于从某种列表生成多个形状的建议?

干杯

托尼

+0

哎呦,我的坏。 ... – aaaidan 2012-04-14 23:02:51

回答

2

我用你的代码发挥各地,它是完美无瑕的。没有绘制三角形,因为不知何故,路径回到自己什么都没有。只放置前两个顶点,它是可以的。

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

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

注意,我注释掉document.ready

+0

啊!我刚刚注意到这些坐标已经回到原来的位置了,哈哈。改变它,它已经出现。谢谢! – 2012-04-15 02:08:19