LoginSignup
4
3

More than 1 year has passed since last update.

vis.jsを触ってみた。そしてノードの名前を変更してみる。

Last updated at Posted at 2019-06-16

初めに

私は普段ゲームを作っていますが、作れるアプリのレパートリーが増えるといいなと思って
Webアプリケーションを作ることを予定しています。
そのアプリを作るためにネットワーク図を使いたいなと思い、調べたところ良さそうなライブラリがvis.jsでした。

サンプルを実行してみる

公式のベーシックサンプルを見てみました。

サンプルデモ

6f30ec843e0baad103869af26beadc52.gif
ノードを動かしてみるとめっちゃプルンプルンしています。

サンプル実行方法

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>

実行結果

215e4672852e7ba9ba77d2ae3729f7f3.gif

最後に

何かアプリを作りたいと思った時に、こういったライブラリがあるととても楽ですね!
自身エンジニアとして未熟者なので、必要なライブラリをすぐに使えるようになる力

  • ドキュメントを読む力
  • サンプルを読む力

など記事を書くことを通して付けていきたいと思っています。

4
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3