d3 力导向布局在重新加热时扩展

mar*_*aft 5 javascript d3.js

考虑任何 d3 力导向动画,例如:

http://bl.ocks.org/mbostock/1062288

加载该图并让节点稳定下来,这样它们就不会移动。将鼠标悬停在橙色节点上并让鼠标保持静止。单击并执行其他操作。您将看到所有节点向内移动一点,然后扩展回到正常状态。

我不喜欢这种不必要的动作,我需要将其删除。

我相信这与图表“重新加热”有关(参见https://github.com/mbostock/d3/wiki/Force-Layout ),它将 alpha 参数设置为 0.1。具体来说,我发现不必要的移动在以下任何操作之后立即发生。

  1. 一个新节点被添加到图中
  2. 从图中删除一个节点
  3. force.drag()叫做。

到底是什么导致了这种“不必要的运动”,我该如何禁用它?(不禁用节点拖动)

mar*_*aft 0

通常,当force.resume()触发时,alpha 值会从 0 跳到 0.1。通过更缓慢地放松阿尔法,我们可以掩盖“不必要的运动”。

我仍然对其他想法和解决方案持开放态度。

旧功能:

force.resume = function() {
  return force.alpha(.1);
};
Run Code Online (Sandbox Code Playgroud)

替换功能:

force.resume = function() {
  var alpha = force.alpha()
  if( alpha < 0.005 ){ alpha = 0.0055 }
  else if( alpha < 0.11 ){ alpha += 0.0006 }
  return force.alpha(alpha);
};
Run Code Online (Sandbox Code Playgroud)