2015-09-09 42 views
0

我的目標 - 我試圖給節點拖拽節點後計算[x,y],以便節點根據我計算的位置佔據位置,而不是放在何處。D3js強制佈局更新節點和鏈接

相關示例 - 我看到了更新forcelayout中節點和鏈接的示例。比方說,

https://gist.github.com/mbostock/1095795

http://bl.ocks.org/mbostock/1095795

我的做法(這是不工作) -

在我的情況下,要求從上面的例子略有不同。在拖拽一個節點(我做了一個force.stop()以避免強制佈局接管拖拽節點的位置分配)之後,我根據該節點被刪除的位置將該節點重新分配給不同的[x,y]。給它一個d.fixed。完成後我更新我的節點。節點佔用計算出的[x.y]位置,而不是它被放置的位置。直到這一步,一切都好。

但是,在其他節點的後續拖拽(即drag.resume()自動啓動)時,上一步拖動的節點根據之前刪除的位置佔用[x,y]在我的計算[x,y]上,它在前一步的拖動結束時很好地佔據了它。

我以爲力佈局沒有更新節點和鏈接。所以我用下面的新節點和鏈接更新了力佈局,

force.nodes(newNodes) .links(newLinks) .start();

我這樣做是mouseup.drag

仍是不工作的,任何幫助表示讚賞。謝謝

+0

您需要向我們展示一些代碼。 –

+0

請在下面找到鏈接。 jsfiddle.net/lkanikka/Lymtedrq爲了簡單起見,在節點被拖拽後,我將它放在[10,10]中。在實際的例子中,它是不同的。 一旦放置了節點,拖動結束後,我拖動另一個節點。我先前拖動的節點移回到[xy],這是它被放置的地方,而不是[10,10](計算出的[x,y])... 看起來像是哪裏的[x,y]它被丟棄存儲在強制佈局中。如何用new [x,y]更新forcelayout?我已經在mouseup中更新了圖形數組,並執行了force.start()。它沒有工作... –

+0

你需要設置'px'和'py'屬性以及https://jsfiddle.net/Lymtedrq/1/ –

回答

0

設置位置時,需要設置內部使用的pxpy屬性。更改(和簡化)示例here

相關問題