Javascript d3.几秒钟后阻力停止

Javascript d3.几秒钟后阻力停止,javascript,d3.js,Javascript,D3.js,今天的问题是关于d3.drag()函数的。我真的不理解simulation.alpha值 我面临以下问题:我想四处拖动节点。下面是代码的一小部分: var node = d3.select("svg").selectAll("circle") .data(nodes).enter().append("circle") .call(d3.drag().on("start", dragstart)

今天的问题是关于
d3.drag()
函数的。我真的不理解
simulation.alpha

我面临以下问题:我想四处拖动节点。下面是代码的一小部分:

var node = d3.select("svg").selectAll("circle")
             .data(nodes).enter().append("circle")
             .call(d3.drag().on("start", dragstart)
                            .on("drag", dragged)
                            .on("end", dragend));

function dragstart(d){
    //If i delete the following line, my simulation stops after some time.
    if (!d3.event.active) simulation.alphaTarget(0.3).restart();
    d.fx = d.x;
    d.fy = d.y;
};
正如我在评论中所说,如果我不重新启动
alphaTarget
,拖动会在几秒钟后停止。有人能解释这种现象吗


这是我完整的JSFIDLE:

一小时前遇到了同样的问题

可能您的渲染逻辑在tick函数中。如果希望能够在不重新启动模拟的情况下拖动元素,则应实现渲染功能(该功能告诉元素从数据的x和y设置其位置)。然后将渲染函数调用添加到“拖动”函数

您还可以将tick()函数更改为

function tick(){
    render();
}
这不是最有效的方法,但对我来说很有效


如果您希望在拖动之后也开始模拟,那么您的实现是正确的

一小时前遇到了同样的问题

可能您的渲染逻辑在tick函数中。如果希望能够在不重新启动模拟的情况下拖动元素,则应实现渲染功能(该功能告诉元素从数据的x和y设置其位置)。然后将渲染函数调用添加到“拖动”函数

您还可以将tick()函数更改为

function tick(){
    render();
}
这不是最有效的方法,但对我来说很有效

如果您希望在拖动之后也开始模拟,那么您的实现是正确的