2012-08-06 68 views
0

例这里的具体实例:http://jsfiddle.net/dhREK/32/拉斐尔JS选择路径/对象/节点

随着拉斐尔JS我创建了一系列使用for循环的三角形。创建三角形后,我希望能够通过索引选择拉斐尔对象动画它们中的任何一个,是这样的:

tri[1] 

tri.1 

,但我不知道的权利句法。在任何情况下,使用

tri.animate({fill: '#ff0000'}, 400) 

只动画上一个三角形。

我该如何专门选择其他节点?

谢谢!

var paper = new Raphael(0, 0, 500, 500); 

for(var i = 0; i < 6; i++) { 
    var coords = 'M 43 0 L 74 63 L 13 63 Z'; 

    if(i % 2) { 
     coords = 'M 43 63 L 74 0 L 13 0 Z';      
    } 

    var tri = paper.path(coords).attr({ 
     'fill' : '#000', 
     'stroke-width' : '0' 
    }); 

    tri.transform('T'+i * 34+',0'); 
} 


tri.animate({fill: '#ff0000'}, 400) 

PS:我能得到我的所有论文在jQuery对象的儿童(如被看见在的jsfiddle链接),但一个jQuery对象上使用animate()不允许我以动画拉斐尔性能。 ..任何评论,将不胜感激!

回答

1

tri转成数组。

var paper = new Raphael(0, 0, 500, 500), 
    tri = []; 

for(var i = 0; i < 6; i++) { 
    var coords = 'M 43 0 L 74 63 L 13 63 Z'; 

    if(i % 2) { 
     coords = 'M 43 63 L 74 0 L 13 0 Z';      
    } 

    tri[i] = paper.path(coords).attr({ 
     'fill' : '#000', 
     'stroke-width' : '0' 
    }); 

    tri[i].transform('T'+i * 34+',0'); 
} 


tri[1].animate({fill: '#ff0000'}, 400); 
+0

我强烈建议按照执行',而不是阵列Paper.set' Dan Lees回答。 – bennedich 2012-08-06 16:42:22

+0

我也强烈建议实施'Paper.set'而不是数组。 – 2012-08-06 18:46:32

4

更适合这种情况会类似阵列的Paper.set

您可以定义它像这样

var triangles = Paper.set(); 

for(var i = 0; i < 6; i++) { 
    // .... 
    var tri = paper.path(coords) // 

    triangles.push(tri); 
} 

triangles.animate(
    // ... 
); 
+0

一旦他们在集合中,我将如何选择*个人*三角形索引? – 2012-08-06 15:26:52

+0

@ j-man86与普通的数组一样,例如'三角形[1]'。优点是它实现了[composite pattern](http://www.joezimjs.com/javascript/javascript-design-patterns-composite/),这意味着你可以在整个集合上使用例如'Element.animate'。 – 2012-08-06 15:33:23