2014-09-29 59 views
0

我看了一下邁克Bostocks課就到這裏嵌套元素:你如何在一個D3指向力圖中使用嵌套元素?

http://bost.ocks.org/mike/nest/

這是合乎邏輯的使用元素嵌套,但由於某些原因,我無法找到有效的任何嵌套的例子有向圖。例如,爲什麼不在節點中嵌套文本元素,因此如果將鼠標懸停在節點上,文本將出現以響應懸停事件。如果沒有嵌套,你必須想出一些機制來將文本元素與節點元素進行匹配。事實上,我看到各種各樣的方法來做到這一點,而不是使用嵌套。

總之,任何人都可以提供一個使用嵌套元素的有向圖的例子嗎?

回答

1

請務必記住,「節點」是一個完全抽象的概念。您可以使用任何類型的元素或整組元素來表示節點。

您可能會嘗試的一件事是使用g元素來表示您的節點,並使用翻譯將它們定位在每個滴答。

通過這種方式,在節點進入後,您可以爲其添加任意數量的元素,並且它們將保持連接到該節點。例如,您可以附加一個圓形元素和一個文本元素,然後這兩個元素將在力佈局運行時跟隨它們的父元素g

然後你可以簡單地使用CSS來實現你想要的懸停效果。例如,假設你已經爲節點g元素,每一個都具有一流的.node,你可以將鼠標懸停顯示/隱藏文本,如下所示:

.node text { 
    opacity: 0; 
} 
.node:hover text { 
    opacity: 1; 
} 

HERE是一個很簡單的例子,你可以按照實現的那種使用我所描述的技術,我認爲您已經過了標記的節點。希望有所幫助。

+0

我懷疑可能有一個很好的理由,爲什麼嵌套的文本沒有用在這些強制定向圖的例子中。我已經調整了你的例子[這裏](http://jsbin.com/xajalo/7/)。如果將鼠標懸停在標籤上,則可以看到其他節點最終遮蔽了文本。也許有可能使用z-index屬性來解決這個問題? – Hexatonic 2014-10-01 16:15:09

+0

發現此嵌套方法的另一個有問題的元素。問題不在於它的錯誤,而在於它應該謹慎使用並且可以解釋缺乏例子。在上面的擴展示例中,懸停事件現在觸發節點之間的空間而非節點本身,因爲大標籤現在已成爲觸發懸停事件的g元素的一部分。 – Hexatonic 2014-10-01 16:47:38

+1

在這種情況下,您不必嵌套。記住重要的一點:*節點是抽象*,它只是數據;只是一組座標。您可以將該數據綁定到多個元素。 [** HERE **](http://jsbin.com/bazalu/1/edit?css,js輸出)是一種不同的方法。我爲節點和標籤創建了兩個單獨的圖層。然後將數據綁定到兩個圓圈*和*標籤,懸停交互通過將懸停圓圈的索引與具有相同索引的標籤進行匹配完成。最後,在CSS中,我關閉了標籤層的指針事件,以免干擾。 – jshanley 2014-10-01 17:57:37

相關問題