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();
}
这不是最有效的方法,但对我来说很有效
如果您希望在拖动之后也开始模拟,那么您的实现是正确的