javascript - 强制布局内部强制布局 : How to drag inner nodes

标签 javascript svg d3.js

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

D3.js 的强制布局允许用鼠标拖动一个节点。然而,尽管由于内力布局,较小的内圈相对于较大的外圈移动,但我无法以任何似乎独立于较大圈的方式拖动内圈。也就是说,拖动内圈与拖动外圈完全一样。 (设置附加到外部节点的数据的 fixed 属性没有帮助——如 this slightly more complicated fiddle 中那样。)

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

最佳答案

当您拖动内圈时,您也将 drag 事件分派(dispatch)到外节点(因为它们是重叠的)。为防止这种情况,您需要为拖动行为使用 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();
        })
       );

这是您的 fiddle updated .

关于javascript - 强制布局内部强制布局 : How to drag inner nodes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28935312/

相关文章:

javascript - Typescript 在 valueAsDate 上抛出错误

javascript - jquery 变量不显示每个循环的值

javascript - 试图阻止 Javascript 在页面加载时运行

html - 在容器中居中响应式 svg 圆圈

javascript - d3.js 中的外部文件未定义 JSON 数据?

javascript - 过滤数据时更改按钮的颜色

javascript - Javascript 中用于删除多个空格的特殊字符

svg - 如何创建支持多种像素比的 SVG?

d3.js - 在 D3.js 中导入和解析 SVG 文件

python - 本地python简单http服务器在Windows中发送错误的mime类型,但在Linux中不发送错误的mime类型 for.svg