2015-05-16 84 views
0

我很努力去理解以下行爲:我有兩張地圖(基於topojson數據,通過d3可視化),並且在map1的某些部分上的mouseover上,map2的相應部分應該點亮。我用它來改變樣式(不透明或填充),但現在我想突出每個地圖部分的邊界。向前移動路徑改變選擇?

如例如here所示,需要將特定路徑移動到前方以使所有邊界可見。這對於我移動鼠標的區域(使用這個)是沒有問題的,但是當我選擇其他地圖的相應部分時,它會運行一次,然後其他部分會被選中 - 所以我的猜測是一些混亂的東西選擇。

這裏是代碼:

.on("mouseover",function(d){ 
var old=d.properties.iso; //this is the identifying number of the map-part(s) 

sel=svg2.selectAll("path") 
    .data(datastore2015.features) 
    .filter(function(d){return d.properties.iso==old;}) 
    .node(); //here the corresponding part(s) get filtered 

d3.select(sel.parentNode.appendChild(sel)).classed("high2",true); //and this moves it to front and highlights the borders 

鼠標移開時,它只是重置:

.on("mouseout",function(d){ 
svg2.selectAll("path").classed("high2",false); 

當我的數據記錄到控制檯似乎每鼠標懸停移動通過數據集+1項,從鼠標移過來的第一個入口開始。我無法弄清楚爲什麼會發生這種情況,以及如何避免它。

我很感激你可以給我的任何想法,主要是我想了解什麼是錯誤的,爲什麼。

感謝

回答

1

,所以我發現我的錯誤,再次調用數據變量似乎已經把事情搞亂 - 不知何故,我的印象是,我需要它之下,但它只是罰款這種方式:

sel=svg2.selectAll("path").filter(function(d){return d.properties.iso==old;}).node(); 
d3.select(sel.parentNode.appendChild(sel)).classed("high2",true); 

對不起,麻煩,我沒有看到這種可能性。