2011-08-22 58 views
0

發現改變變量屬性說我有var mycircle = paper.circle(0, 0, 20).attr({stroke: "#ff0000"});RaphaelJS:如果從頁面顯示亂碼

現在,在默認情況下,當有人在www.url.com/index.html去我的網頁,他們獲得這個圈子裏的紅色行程。

但是,如果我想 圈行程什麼改變,如果瀏覽時#hash定義,例如 已經做出選擇,並且您想將其鏈接到某人。說有人 現在瀏覽到www.url.com/index.html#mycircle

有了:var hash = window.location.hash.substr(1)我可以把這些變量散列返回「mycircle」。

但是,這樣做 hash.attr({stroke: "#0000ff"});筆觸顏色不會變爲藍色!有沒有辦法解決這個問題,所以我可以像這樣改變圓的筆畫?

//編輯

我已經建立了我的圈子就像這樣:

var name1 = paper.circle(....); 
name1.node.id = "name1"; 
name1.node.name = "Name"; 

var name2 = paper.circle(....); 
name2.node.id = "name2"; 
name2.node.name = "Another Name"; 

等。然後,我讓他們組合成一組:

nodes = paper.set(); 
nodes.push(name1, name2, name3, name4....); 

然後我用nodes.hover(function() { });nodes.click(function() { });定義操作。 name.node.id用於將正確的信息頁加載到div中,而name.node.name在用戶懸停在節點上方時顯示在節點上方。

我試圖重組我的節點的建議:

var mapObjects = {}; 

mapObjects['name1'] = paper.circle(....); 
mapObjects['name1'].node.id = "name1"; 
mapObjects['name1'].node.name = "Name"; 

mapObjects['name2'] = paper.circle(....); 
mapObjects['name2'].node.id = "name1"; 
mapObjects['name2'].node.name = "Another Name"; 

我又試圖通過簡單地改變節點到MapObjects的mapObjects.hover(function() { });同樣點擊與像以前一樣使用該功能。這些都不行了!散列技術對於正確的方向邁出了一步。我如何獲得懸停和點擊功能?

+0

嘗試'MapObjects的[ 'NAME1'] = NAME1;'代替'MapObjects的[ 'NAME1'] = paper.circle(....); ...'。當你調用'paper.circle'時,它會創建一個新的圓。這不是你想要的,因爲你已經創建了它們。 –

+0

好吧,如果我在腳本的最後添加散列變量和myObjects [hash] .attr命令,這個方法可行。否則,如果未添加散列或#hash不存在於mapObjects數組中,則會中斷腳本。這是壞事嗎?我認爲腳本仍然會打破,但只要它們是最後一個重要的元素呢? –

+0

我嘗試添加jQuery if($。inArray(hash,mapObjects),但它沒有幫助。這將有用,因爲我必須將哈希值指定爲變量「lastCircle」的值,如果沒有圈選擇lastCircle = NULL; –

回答

1

的EVAL會有所幫助,但它是非常脆弱的。更好的方法是要記住在關聯數組圓:

var objects = {}; 
objects['mycircle'] = paper.circle(0, 0, 20).attr({stroke: "#ff0000"}); 
objects[hash].attr({stroke: "#0000ff"}); 
+0

因此,如果我將具有40不同的圈子我會同樣列出他們 objects ['mycircle1'] = ... objects ['mycircle2'] = ... 等等哈希最後一個?所有的圈子都會有相同的筆畫,這只是爲了突出顯示選擇。 –

+0

好吧,我看到這個作品至少在基礎水平。我的腳本非常複雜,所以我會盡力與這位校長一起工作,然後回覆給你。謝謝瑪麗安! –

+0

儘管所有對象都是唯一的實例(具有相同的筆畫),但它只會突出顯示一個。 –