如何在D3中添加强制拖动事件并使节点停留在我离开的位置?

时间:2013-12-14 17:11:17

标签: javascript d3.js

我有一个D3 api,它显示了节点之间的某些关系。我想在这里应用force.drag()事件,我将节点拖到一个位置并离开节点,它将保留在那里。我有一个在这里工作小提琴,这显示了节点之间的关系。任何人都可以帮助我从这里在这个api中做这个事件? ..

这是小提琴

var node = vis
  .selectAll("g.node")
  .data(data.nodes)
  .enter()
  .append("svg:g")
  .attr("class", "node")
  .call(force.drag);

http://jsfiddle.net/vuCAx/

我认为应该在这里进行更改

1 个答案:

答案 0 :(得分:4)

解决方案涉及在dragstart上将“fixed”节点属性设置为true。

var drag = force.drag()
    .on("dragstart", dragstart);

var node = vis.selectAll("g.node").data(data.nodes).enter().append(
    "svg:g").attr("class", "node").call(drag);

function dragstart(d) {
  d.fixed = true;
}

见这里:Sticky Force Layout

更新小提琴:http://jsfiddle.net/vuCAx/1/

文档:force.drag()

  

如果要在拖动后拖动节点保持固定,请设置   在dragstart上将fixed属性设置为true,就像在粘性力布局中一样   示例