初めに
私は普段ゲームを作っていますが、作れるアプリのレパートリーが増えるといいなと思って
Webアプリケーションを作ることを予定しています。
そのアプリを作るためにネットワーク図を使いたいなと思い、調べたところ良さそうなライブラリがvis.jsでした。
サンプルを実行してみる
公式のベーシックサンプルを見てみました。
サンプルデモ
サンプル実行方法
DLページでzipをダウンロードして、その中にあるdistディレクトリをコピーして
distディレクトリを置いた同じディレクトリ内に以下のソースコードを配置するとローカルで動きました。
ディレクトリ構成
Sample
|-dist/
|-Basic.html
ソースコード
Basic.html
<!doctype html>
<html>
<head>
<title>Network | Basic usage</title>
<script type="text/javascript" src="./dist/vis.js"></script>
<link href="./dist/vis-network.min.css" rel="stylesheet" type="text/css" />
<style type="text/css">
#mynetwork {
width: 600px;
height: 400px;
border: 1px solid lightgray;
}
</style>
</head>
<body>
<p>
Create a simple network with some nodes and edges.
</p>
<div id="mynetwork"></div>
<script type="text/javascript">
// create an array with nodes
var nodes = new vis.DataSet([
{id: 1, label: 'Node 1'},
{id: 2, label: 'Node 2'},
{id: 3, label: 'Node 3'},
{id: 4, label: 'Node 4'},
{id: 5, label: 'Node 5'}
]);
// create an array with edges
var edges = new vis.DataSet([
{from: 1, to: 3},
{from: 1, to: 2},
{from: 2, to: 4},
{from: 2, to: 5},
{from: 3, to: 3}
]);
// create a network
var container = document.getElementById('mynetwork');
var data = {
nodes: nodes,
edges: edges
};
var options = {};
var network = new vis.Network(container, data, options);
</script>
</body>
</html>
ノードの名前を変更してみる
サンプルをパッとみた感じノードの名前を変更しているものがなかったので、
実際に公式ドキュメントを読みながら手を動かしてみました。
サンプルの実行は簡単ですが、こういうものはやはり実際手を動かすことで頭に入ってきますね。
以下処理を加えたコードです。
ソースコード
Basic.html
<!doctype html>
<html>
<head>
<title>Network | Basic usage</title>
<script type="text/javascript" src="./dist/vis.js"></script>
<link href="./dist/vis-network.min.css" rel="stylesheet" type="text/css" />
<style type="text/css">
#mynetwork {
width: 600px;
height: 400px;
border: 1px solid lightgray;
}
</style>
</head>
<body>
<p>
Create a simple network with some nodes and edges.
</p>
<div id="mynetwork"></div>
<script type="text/javascript">
var nowSelectedNode = "";
// create an array with nodes
var nodes = new vis.DataSet([
{id: 1, label: 'Node 1'},
{id: 2, label: 'Node 2'},
{id: 3, label: 'Node 3'},
{id: 4, label: 'Node 4'},
{id: 5, label: 'Node 5'}
]);
// create an array with edges
var edges = new vis.DataSet([
{from: 1, to: 3},
{from: 1, to: 2},
{from: 2, to: 4},
{from: 2, to: 5},
{from: 3, to: 3}
]);
// create a network
var container = document.getElementById('mynetwork');
var data = {
nodes: nodes,
edges: edges
};
var options = {};
var network = new vis.Network(container, data, options);
//追記start---------------------------------------------------------
network.on("click",function(params){
var nodeId = params['nodes'][0];
if(nodeId == null){
return;
}
document.getElementById('test_p').innerHTML = nodeId;
nowSelectedNode = nodeId;
});
function OnButtonClick(){
var str = document.getElementById('node_input').value;
if(nowSelectedNode == null){
return;
}
nodes.update({id: nowSelectedNode, label: str});
}
//追記end---------------------------------------------------------
</script>
<!-- 追記 -->
<!-- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
<table>
<tr>
<td>ノード名</td>
<td><input id="node_input" type="text" name="name" size="30" maxlength="20" value="node"></td>
<td><input type="button" onclick="OnButtonClick();" value="変更"></td>
</tr>
</table>
<p id="test_p">
</p>
<!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< -->
</body>
</html>
実行結果
最後に
何かアプリを作りたいと思った時に、こういったライブラリがあるととても楽ですね!
自身エンジニアとして未熟者なので、必要なライブラリをすぐに使えるようになる力
- ドキュメントを読む力
- サンプルを読む力
- 勘
など記事を書くことを通して付けていきたいと思っています。