我使用VivaGraphJS创建了一个图表,一切都很顺利,但图表正在移动。有一个关于constantLayout的示例,但是您应该为每个节点指定一个位置的问题。
这是代码:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../js/vivagraph.js"></script>
<script type="text/javascript">
function main () {
// create a graph object.
var graph = Viva.Graph.graph();
add nodes and edges to the graph:
graph.addLink(1, 2);
graph.addLink(1, 3);
graph.addLink(1, 4);
var renderer = Viva.Graph.View.renderer(graph);
renderer.run();
}
</script>
<style type="text/css" media="screen">
html, body, svg { width: 100%; height: 100%;}
</style>
</head>
<body onload='main()'>
</body>
</html>
以下是有关常量布局的代码:
<!DOCTYPE html>
<html>
<head>
<title>VivaGraphs constant layout demo page</title>
<script src="../../dist/vivagraph.js"></script>
<script type='text/javascript'>
function onLoad() {
var graph = Viva.Graph.graph(),
nodePositions = [{x : -50, y: 0}, {x : 0, y: -50}, {x : 50, y: 0}], // predefined node positions
layout = Viva.Graph.Layout.constant(graph),
renderer = Viva.Graph.View.renderer(graph, {
layout : layout, // use our custom 'constant' layout
}),
i, nodesCount = nodePositions.length; // convinience variables.
// Add nodes
for(i = 0; i < nodesCount; ++i) {
graph.addNode(i, nodePositions[i]);
}
// and make them connected in cycle:
for (i = 0; i < nodesCount; ++i) {
graph.addLink(i % nodesCount, (i + 1) % nodesCount);
}
// set custom node placement callback for layout.
// if you don't do this, constant layout performs random positioning.
layout.placeNode(function(node) {
// node.id - points to its position but you can do your
// random logic here. E.g. read from specific node.data
// attributes. This callback is expected to return object {x : .. , y : .. }
return nodePositions[node.id];
});
renderer.run();
}
</script>
<style type="text/css" media="screen">
body, html, svg { width: 100%; height: 100%; overflow: hidden; }
</style>
</head>
<body onload="onLoad()">
</body>
有什么建议!?
我希望我能很好地解释我的问题。感谢
答案 0 :(得分:3)
如果您想要动态布局,但想在某些时候使用renderer.pasue()
方法停止动画。
如果要使用常量布局,可以在代码中添加一些内容以告诉它节点的位置。这是您需要的代码:
function main () {
// create a graph object.
var graph = Viva.Graph.graph(),
nodePositions = [{x : -50, y: 0}, {x : 0, y: -50}, {x : 50, y: 0}, {x: 60, y: 20}],
layout = Viva.Graph.Layout.constant(graph);
for(var i = 1; i < 5; i++) {
graph.addNode(i, nodePositions[i-1]);
}
graph.addLink(1, 2);
graph.addLink(1, 3);
graph.addLink(1, 4);
layout.placeNode(function(node) {
return nodePositions[node.id-1];
});
var renderer = Viva.Graph.View.renderer(graph, { layout:layout });
renderer.run();
}