我在d3.js中有一個強制有向圖(Brilliant:對MB和所有涉及的巨大榮譽!)。我想以某種方式能夠檢測,並返回當前正在拖動的任何節點的索引。如何檢測d3.js中的元素拖動力有向圖
我知道我可以重新定義d3.behavior.drag()來附加一個回調到拖動事件,但我想要所有的本地force.drag的行爲,並且它似乎笨拙地重複它只是爲了添加這個一點點。在我缺乏經驗的情況下,也許我忽略了一些簡單的方法來做到這一點?
嗯,是的,我應該更加明確。這就是我的嘗試:我已經使用here作爲我的模型,將其修改爲適合我的目的,並且隨着我學習d3.js。因此,我所定義的節點:
var circle = svg.append("svg:g").selectAll("circle")
.data(force.nodes())
.enter().append("svg:circle")
.attr("class", "node")
.attr("r", 6)
.on("click", clicked)
.on("dblclick", dblclick)
.on("contextmenu", cmdclick)
.on("drag", draghandler)
.call(force.drag);
function draghandler(d){
console.log(d);
console.log(this);
}
我的事件處理程序click
,dblclick
和contextmenu
,工作完全如我所料;但是,當我嘗試爲drag
添加事件處理程序時,它從不執行。我想象它是失敗的,因爲我錯誤地使用了它,或者在錯誤的地方,或者因爲行爲受到force.drag
的控制,我將不得不重新定義,以增加我想要的額外行爲。
執行此操作的方法是在'drag'事件處理程序中執行此操作。這不涉及重新定義。 –
非常感謝@LarsKotthoff,這是我的第一個想法,但顯然我做錯了。增加了進一步的論述。 – jjon
我認爲在這種情況下,事件是'force.drag'。 –