2012-08-17 63 views
2

我希望有人能告訴我如何把整個元素集合toFront在拉斐爾JS的。拉斐爾JS:把設置前臺

我正在與聖拉斐爾的元素,其中的每一個被存儲在一個陣列使其更容易交互和定位各個套一些動態生成的集工作。當用戶與各組相互我希望能夠把全套的應用程序的前面。 http://raphaeljs.com/reference.html#Element.toFront

但是這已經不能正常工作:

我一直在使用.toFront()作爲概括這裏嘗試。每套包含任一圓或圓扇形,文本元素,要麼一個附加圓或附加扇區。

任何想法?在任何一個點上用戶最多可以有這些組,從而使套到前面的40/50將是一種必然不管。

回答

2

我有類似的問題,toFront()函數... 以及我想說有兩種方法可以做到這一點... 第一個(不太推薦)在所有的元素的集合,使他們在前面,但他們仍然會按照集合中的順序排序....不好的方法... set.forEach(el){ e.toFront();}

第二個是真正的性感:)我的最愛:)精美的老總phrogz解釋here

我建議使用「G」標記......簡單的JavaScript。讓所有的組被封閉在AG標籤

var mySet = document.createElementNS("http://www.w3.org/2000/svg", "g"); 
mySet.setAttribute('id','myset'); 
//should look something like this 
//use jQuery append or javaScript appendChild to add your set elements to this group 
<g id = 'myset'> 
     <rect> 
     <circle> 
     //etc etc 
    </g> 

現在

 mySet.parentNode.appendChild(mySet); //the key line 

這將只是把它的SVG容器的底部,因此正在根據畫家繪製的最後,並在頂部顯示模型也提到由先生phrogz在鏈接....你可以使用JavaScript來操縱自己的Z指數,如果需要...

+0

感謝您的回覆,我生成的對象動態和連續,所以在這種情況下會每當我創建一個新的集合然後,我需要創建一個新的g標籤元素將該集追加到g標籤? – 2012-09-04 07:51:23

+1

不幸的是....或者你必須運行集合的每個元素的關鍵線.... set.forEach(function(el){el.node.parentNode.appendChild(el.node)}) ;但這與第一種解決方案相同.... – Aukhan 2012-09-04 11:57:32