2012-08-06 66 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