|
|
- <!DOCTYPE html>
- <html>
- <head>
- <script src="../dist/vis.js"></script>
- <link type="text/css" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.9.0/vis.min.css">
-
- <style>
- #network {
- width: 100%;
- height: 400px;
- border: 1px solid gray;
- }
- </style>
- <script type="text/javascript">
-
-
-
-
- function addChild(Parent){
-
- var newNodes = 5;
- var angle = 2* Math.PI / newNodes;
- var r = 150;
- var shift = Math.random() * Math.PI;
-
- for(i=0; i< newNodes; i++) {
-
- var xnew = network.getPositions(Parent)[Parent].x + Math.cos(angle * i + shift) * r;
- var ynew = network.getPositions(Parent)[Parent].y + Math.sin(angle * i + shift) * r;
-
- var newId = guid();
-
- try {
- nodes.add(
- {id: newId,
- label: "New Node",
- x: xnew,
- y: ynew })
- }
-
- catch (err) {}
-
- var edgeId = guid();
-
- try {
- edges.add(
- {id: edgeId,
- from: Parent,
- to: newId})
- }
-
- catch (err) {}
-
- }
- };
-
-
- function guid() {
- function s4() {
- return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
- }
- return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
- s4() + '-' + s4() + s4() + s4();
- };
-
-
-
- var nodes, edges, network;
-
- function draw() {
- nodes = new vis.DataSet([
- {"id": "1",
- "label": "Start"}]);
-
- edges = new vis.DataSet([]);
-
- var container = document.getElementById('network');
- var data = {
- nodes: nodes,
- edges: edges
- };
- var options = {
- "edges": {arrows:'to', "smooth": {"type": 'dynamic'}},
- "physics": {
- "forceAtlas2Based": {
- "gravitationalConstant": -514,
- "springLength": 150,
- "springConstant": 0.1,
- "damping": 0.9},
- "maxVelocity": 15,
- "minVelocity": 1,
- "timestep": 0.9,
- "solver": "forceAtlas2Based"}};
- network = new vis.Network(container, data, options);
- network.fit();
-
- network.on("click", function (params) {
- if(params.nodes[0]!=null){addChild(params.nodes[0])}});
- }
-
- </script>
- </head>
- <body onload="draw();">
- <div id="network"></div>
- </body>
- </html>
|