D3.js 释放所有粘性节点

D3.js 释放所有粘性节点,d3.js,graph,force-layout,D3.js,Graph,Force Layout,如何修改以下内容,以便在按下按钮时释放所有粘性节点?我已经看到了通过双击()将要释放的节点(unstuck)实现了这一点,但我希望同时释放它们(我的计划是将其包含在图形的restart()函数中) .连接线{ 行程:#999; 笔划不透明度:0.6; } .节点圆{ 冲程:#fff; 笔划宽度:1.5px; } //创建放置力定向图的位置 var svg=d3。选择(“svg”), 宽度=+svg.attr(“宽度”), 高度=+svg.attr(“高度”); 变量节点\u数据=[{ “姓名

如何修改以下内容,以便在按下按钮时释放所有粘性节点?我已经看到了通过双击()将要释放的节点(unstuck)实现了这一点,但我希望同时释放它们(我的计划是将其包含在图形的
restart()
函数中)


.连接线{
行程:#999;
笔划不透明度:0.6;
}
.节点圆{
冲程:#fff;
笔划宽度:1.5px;
}
//创建放置力定向图的位置
var svg=d3。选择(“svg”),
宽度=+svg.attr(“宽度”),
高度=+svg.attr(“高度”);
变量节点\u数据=[{
“姓名”:“特拉维斯”,
“性”:“M”
},
{
“名称”:“耙子”,
“性”:“M”
},
{
“姓名”:“戴安娜”,
“性别”:“F”
},
{
“姓名”:“雷切尔”,
“性别”:“F”
},
{
“姓名”:“肖恩”,
“性”:“M”
},
{
“名称”:“翡翠”,
“性别”:“F”
}
]
变量链接\u数据=[{
“来源”:“特拉维斯”,
“目标”:“耙”
},
{
“来源”:“戴安娜”,
“目标”:“耙”
},
{
“来源”:“戴安娜”,
“目标”:“Rachel”
},
{
“来源”:“Rachel”,
“目标”:“耙”
},
{
“来源”:“Rachel”,
“目标”:“肖恩”
},
{
“来源”:“翡翠”,
“目标”:“Rachel”
}
]
//设置模拟
var simulation=d3.forceSimulation()
//添加节点
.节点(节点\数据);
//加力
//我们将向每个节点添加一个电荷
//还要加一个定心力
//和一支连接部队
var link\u force=d3.forceLink(links\u数据)
.id(功能(d){
返回d.name;
});
模拟
.force(“电荷力”,d3.forceManyBody())
.力(“中心力”,d3.力中心(宽度/2,高度/2))
.force(“links”,link_force);
//添加勾号说明:
模拟。on(“滴答声”,滴答声动作);
//为链接画圆圈
var node=svg.append(“g”)
.attr(“类”、“节点”)
.selectAll(“圆圈”)
.数据(节点\数据)
.输入()
.附加(“圆圈”)
.attr(“r”,10)
.attr(“填充”、“红色”);
//为链接画线
var link=svg.append(“g”)
.attr(“类”、“链接”)
.selectAll(“行”)
.数据(链接和数据)
.enter().append(“行”)
.attr(“笔划宽度”,2);
var drag_handler=d3.drag()
。打开(“开始”,拖动开始)
.打开(“拖动”,拖动)
.打开(“结束”,拖动至“结束”);
//与使用相同。调用节点变量,如中所示https://bl.ocks.org/mbostock/4062045 
拖放处理程序(节点)
//拖动处理器
//d是节点
函数拖动_开始(d){
如果(!d3.event.active)simulation.alphaTarget(0.3.restart();
d、 fx=d.x;
d、 fy=d.y;
}
函数拖动(d){
d、 fx=d3.event.x;
d、 fy=d3.event.y;
}
函数拖动结束(d){
如果(!d3.event.active)simulation.alphaTarget(0);
d、 fx=d.x;
d、 fy=d.y;
}
函数操作(){
//在模拟的每个记号处更新圆位置
节点
.attr(“cx”,功能(d){
返回d.x;
})
.attr(“cy”,函数(d){
返回d.y;
});
//更新链接位置
//简单地告诉行的一端跟随一个节点
//而线的另一端要跟随另一个节点左右
链接
.attr(“x1”,函数(d){
返回d.source.x;
})
.attr(“y1”,函数(d){
返回d.source.y;
})
.attr(“x2”,函数(d){
返回d.target.x;
})
.attr(“y2”,功能(d){
返回d.target.y;
});
}

这不是Bostock的bl.ocks,也没有双击来释放节点

无论如何,您只需删除
fx
fy
属性,然后再次重新加热模拟:

d3.select("button").on("click", function() {
    node.each(function(d) {
        d.fx = d.fy = null;
    })
    simulation.alphaTarget(0.3).restart();
})
我使用<代码> AlphaTARGET 因为这是代码中的内容,但是应该考虑使用<代码> Alpha < /C> > .< 以下是更改后的代码:


.连接线{
行程:#999;
笔划不透明度:0.6;
}
.节点圆{
冲程:#fff;
笔划宽度:1.5px;
}
释放
//创建放置力定向图的位置
var svg=d3。选择(“svg”),
宽度=+svg.attr(“宽度”),
高度=+svg.attr(“高度”);
变量节点\u数据=[{
“姓名”:“特拉维斯”,
“性”:“M”
},
{
“名称”:“耙子”,
“性”:“M”
},
{
“姓名”:“戴安娜”,
“性别”:“F”
},
{
“姓名”:“雷切尔”,
“性别”:“F”
},
{
“姓名”:“肖恩”,
“性”:“M”
},
{
“名称”:“翡翠”,
“性别”:“F”
}
]
变量链接\u数据=[{
“来源”:“特拉维斯”,
“目标”:“耙”
},
{
“来源”:“戴安娜”,
“目标”:“耙”
},
{
“来源”:“戴安娜”,
“目标”:“Rachel”
},
{
“来源”:“Rachel”,
“目标”:“耙”
},
{
“来源”:“Rachel”,
“目标”:“肖恩”
},
{
“来源”:“翡翠”,
“目标”:“Rachel”
}
]
//设置模拟
var simulation=d3.forceSimulation()
//添加节点
.节点(节点\数据);
//加力
//我们将向每个节点添加一个电荷
//还要加一个定心力
//和一支连接部队
var link\u force=d3.forceLink(links\u数据)
.id(功能(d){
返回d.name;
});
模拟
.force(“电荷力”,d3.forceManyBody())
.力(“中心力”,d3.力中心(宽度/2,高度/2))
.force(“links”,link_force);
//添加勾号说明:
模拟。on(“滴答声”,滴答声动作);
//为链接画圆圈
var node=svg.append(“g”)
.attr(“类”、“节点”)
.selectAll(“圆圈”)
.数据(节点\数据)
.输入()
.附加(“圆圈”)
.attr(“r”,10)
.attr(“填充”、“红色”);
//为链接画线
var link=svg.append(“g”)
.attr(“类”、“链接”)
.selectAll(“行”)
.数据(链接和数据)
.enter().append(“行”)
.attr(“笔划宽度”,2);
var drag_handler=d3.drag()