Javascript 强制布局内部强制布局:如何拖动内部节点

Javascript 强制布局内部强制布局:如何拖动内部节点,javascript,svg,d3.js,Javascript,Svg,D3.js,我正在开发一个应用程序,在大圆圈上有一个强制布局。对于该力布局中的每个节点,我在较小的圆上附加另一个力布局,这些圆显示在较大的圆()内 js的force布局允许用鼠标拖动节点。然而,尽管由于内力布局,较小的内圈相对于较大的外圈移动,但我无法以任何看起来独立于较大的圆圈的方式拖动内圈。也就是说,拖动内圈与拖动外圈完全相同。(设置附加到外部节点的数据的fixed属性没有帮助——如中所示。) 可以允许在较大的圆内拖动内圆吗?允许将内圈独立于外圈拖动(甚至超过其边缘)也是非常可以接受的行为,尽管这并不理

我正在开发一个应用程序,在大圆圈上有一个强制布局。对于该力布局中的每个节点,我在较小的圆上附加另一个力布局,这些圆显示在较大的圆()内

js的force布局允许用鼠标拖动节点。然而,尽管由于内力布局,较小的内圈相对于较大的外圈移动,但我无法以任何看起来独立于较大的圆圈的方式拖动内圈。也就是说,拖动内圈与拖动外圈完全相同。(设置附加到外部节点的数据的
fixed
属性没有帮助——如中所示。)


可以允许在较大的圆内拖动内圆吗?允许将内圈独立于外圈拖动(甚至超过其边缘)也是非常可以接受的行为,尽管这并不理想。

拖动内圈时,也会将
拖动事件发送到外部节点(因为它们重叠)。为了防止这种情况发生,您需要使用
d3.event.stopPropagation()
作为拖动工具

var innerAnodes = aNode.selectAll("g.inner")
  .data(innerAdata, function (d) {return d.id;})
  .enter()
  .append("g")
  .attr("class", "inner")
  .attr("id", function (d) {return d.id;})
  .call(innerAlayout.drag()
        .on("dragstart", function(){            
            d3.event.sourceEvent.stopPropagation();
        })
       );

这是你的名片。

哇。谢谢我不知道您可以直接在
上拖动
,将
链接在
上,也不知道如何使用
停止播放
。我不知道
sourceEvent
,等等。鼠标操作对我来说仍然是一个模糊的领域。