2015-09-04 265 views
4

我正在尝试绘制一个vis.js网络图,并具有可加载和定位节点的功能。然后我希望物理被禁用,这样节点可以被用户移动。我已经尝试过,但它不起作用。在节点加载后停止vis.js物理,但允许可拖动节点

var options = { 

    nodes: { 
     borderWidth:4, 
     size:60, 
     color: { 
     border: '#222222', 
     background: 'grey' 
     }, 
     font:{color:'black'} 
    }, 
    edges: { 
     arrows: { 
     to:  {enabled: false, scaleFactor:1}, 
     middle: {enabled: false, scaleFactor:1}, 
     from: {enabled: false, scaleFactor:1} 
     }, 
     color: 'black' 
    }, 

    { physics: enabled: false; }; 

有没有人这样做?如果是的话,你可以提供一个例子或建议,以最好的方式来实现这一点。我也读过位于here的解释,但不太熟悉java,我无法确定步骤。

感谢

回答

7

从vis.js开发者处获得更多的工作和帮助之后,这里是已完成的代码,减去json数据和一些选项。诀窍是使用"stabilizationIterationsDone"事件并禁用物理功能:

// create a network 
var container = document.getElementById('mynetwork'); 
var data = { 
    nodes: nodes, 
    edges: edges 
}; 
var options = { 

    nodes: ..., 
    edges: ..., 

    physics: { 
     forceAtlas2Based: { 
      gravitationalConstant: -26, 
      centralGravity: 0.005, 
      springLength: 230, 
      springConstant: 0.18, 
      avoidOverlap: 1.5 
     }, 
     maxVelocity: 146, 
     solver: 'forceAtlas2Based', 
     timestep: 0.35, 
     stabilization: { 
      enabled: true, 
      iterations: 1000, 
      updateInterval: 25 
     } 
    } 
}; 

network = new vis.Network(container, data, options); 

network.on("stabilizationIterationsDone", function() { 
    network.setOptions({ physics: false }); 
}); 
+0

究竟应该在哪里定义“stabilizationIterationsDone”? – NSP

2

我想你首先要让网络稳定,然后才禁用物理?在这种情况下,您可以使用启用的physicsstabilization加载网络。一旦节点稳定后,将触发事件。然后,你可以通过network.setOptions

+0

非常感谢您的回复。我已经在vis.js github网站上读到了这个。我似乎无法得到正确的语法你会介意提供一个例子吗? – Perry

1

我能想出解决办法,现在的代码看起来像这样

// create a network 
var container = document.getElementById('mynetwork'); 
var data = { 
    nodes: nodes, 
    edges: edges 
}; 
var options = { 

    nodes: { 
     borderWidth:1, 
     size:45, 
     color: { 
     border: '#222222', 
     background: 'grey' 
     }, 
     font:{color:'black', 
     size: 11, 
     face :'arial', 
     }, 
    }, 

    edges: { 

     arrows: { 
      to:  {enabled: false, scaleFactor:1}, 
      middle: {enabled: false, scaleFactor:1}, 
      from: {enabled: false, scaleFactor:1} 
     }, 
     color: { 
      color:'#848484', 
      highlight:'#848484', 
      hover: '#848484', 
     }, 
     font: { 
      color: '#343434', 
      size: 11, // px 
      face: 'arial', 
      background: 'none', 
      strokeWidth: 5, // px 
      strokeColor: '#ffffff', 
      align:'vertical' 
     }, 
     smooth: { 
      enabled: false, //setting to true enables curved lines 
      //type: "dynamic", 
      //roundness: 0.5 
     }, 
    } 
}; 

network = new vis.Network(container, data, options); 
    network.setOptions({ 
      physics: {enabled:false} 
    }); 
} 

我不得不搬到了network.setOptions()如图所示的新代码禁用物理和它现在的工作如预期的。