在d3强制布局中只设置一个节点(根)注释可拖动
Set only one node (root) note to be draggable in d3 force layout
我正在制作d3力布局图,看起来很像这样。我想要的是根节点是固定的,不可拖动的。我通过添加
固定了json文件中的根节点"fixed": true
,但它仍然是可拖动的。在我的JS文件中有代码
var nodeEnter = node.enter().append("g")
.attr("class", "node")
.on("click", click)
.call(force.drag);
如果我删除这段代码的最后一行,整个图形就不再是可拖动的了。我认为"力"是一个全局变量,决定了整个图形是可拖动的。但我只想让根节点不可拖拽而它应该是可拖拽的。我该怎么做呢?
您必须从希望保持固定的节点上删除拖动事件。
下面是一个例子:http://jsfiddle.net/qvco2Ljy/112/
我已经通过数据循环给第一个元素一个固定属性和一个donotmove属性,因为当你拖拽并放开时,也许你想要节点保持固定(我的意思是对于子节点),所以在这里使用d.fixed会导致冲突:
graph.nodes.forEach(function(d, i) {
d.donotmove = false;
if (i == 0) {d.donotmove = true; d.fixed = true;}
})
当调用拖动事件时,检查donotmove属性,如下所示:
var drag = d3.behavior.drag()
.origin(function(d) {
return d;
})
.on("dragstart", function(d) {
if (d.donotmove) return;
dragstarted(d)
})
.on("drag", function(d) {
if (d.donotmove) return;
dragged(d)
})
.on("dragend", function(d) {
if (d.donotmove) return;
dragended(d)
})
希望有帮助
相关文章:
- 节点导出返回一个空对象
- 将节点数据分配给另一个变量jstree
- 无法获取vis.js最后一个或第一个选定的网络节点
- 文件的节点自动化移动到另一个文件夹中
- JSTree's data.rslt.obj.text()返回一个文本数组,而不是所需节点的文本
- 使用jQuery+Javascript识别一个空文本节点
- 仅首先需要使用jasmine从节点添加一个文件
- 如果某个值在另一个节点中,我如何每秒自动单击一个链接
- 只需添加一个'允许跨来源请求'到我的节点应用程序工作
- 查找与锁定和更新调度相关的一个或两个节点模块
- XPath以基于另一个节点按位置选择节点's的位置
- 节点发布错误对象的第一个“属性”
- 如何以编程方式在 jsTree 中选择一个节点并打开所有父节点
- 节点模块对象范围:在所有函数之间共享一个对象
- 节点.js将文件从多个目录复制到一个目录
- 在每个循环上完成异步调用,然后转到下一个节点 js
- 选择一个具有纯 js 与C++ 的节点.js库,并在实现上添加
- 在节点中.js“模块”始终是一个对象
- 如何给子节点一个'id'在jtree中使用JSON
- XML DOM中缺少节点——一个简单的示例