几行代码实现多对多网格视图

当我们希望实现如下图所示效果如何实现呢:

我们可以使用Vis.js,vis.js

Vis Network Examples

Vis.js 是一个支持多种网络可视化的库,使用简单,功能强大。

以下是具体实现例子

不带箭头的:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <script src="https://unpkg.com/vis-network/standalone/umd/vis-network.min.js"></script>
</head>
<body>
<div id="mynetwork" style="width: 800px; height: 600px;"></div>
<script>
  const nodes = new vis.DataSet([
    { id: 1, label: 'Node 1' },
    { id: 2, label: 'Node 2' },
    { id: 3, label: 'Node 3' },
    { id: 4, label: 'Node 4' }
  ]);

  const edges = new vis.DataSet([
    { from: 1, to: 2 },
    { from: 1, to: 3 },
    { from: 2, to: 3 },
    { from: 2, to: 4 }
  ]);

  const container = document.getElementById('mynetwork');
  const data = { nodes: nodes, edges: edges };
  const options = {};
  const network = new vis.Network(container, data, options);
</script>
</body>
</html>

带箭头的:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <script src="https://unpkg.com/vis-network/standalone/umd/vis-network.min.js"></script>
</head>
<body>
<div id="mynetwork" style="width: 800px; height: 600px;"></div>
<script>
  // 创建节点数据集
  const nodes = new vis.DataSet([
    { id: 1, label: 'Node 1' },
    { id: 2, label: 'Node 2' },
    { id: 3, label: 'Node 3' },
    { id: 4, label: 'Node 4' }
  ]);

  // 创建边数据集,并设置箭头
  const edges = new vis.DataSet([
    { from: 1, to: 2, arrows: 'to' },
    { from: 1, to: 3, arrows: 'to' },
    { from: 2, to: 3, arrows: 'to' },
    { from: 2, to: 4, arrows: 'to' }
  ]);

  // 获取容器元素
  const container = document.getElementById('mynetwork');

  // 创建数据对象
  const data = {
    nodes: nodes,
    edges: edges
  };

  // 设置网络选项
  const options = {
    edges: {
      arrows: {
        to: {
          enabled: true,
          scaleFactor: 1,
          type: 'arrow' // 'arrow' or 'bar'
        }
      }
    }
  };

  // 初始化网络
  const network = new vis.Network(container, data, options);
</script>
</body>
</html>

带上点击事件的:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <script src="https://unpkg.com/vis-network/standalone/umd/vis-network.min.js"></script>
  <style>
    #mynetwork {
      width: 800px;
      height: 600px;
      border: 1px solid lightgray;
    }
    #eventOutput {
      margin-top: 20px;
    }
  </style>
</head>
<body>
<div id="mynetwork"></div>
<div id="eventOutput">Click on a node to see its details here...</div>
<script>
  // 创建节点数据集
  const nodes = new vis.DataSet([
    { id: 1, label: 'Node 1' },
    { id: 2, label: 'Node 2' },
    { id: 3, label: 'Node 3' },
    { id: 4, label: 'Node 4' }
  ]);

  // 创建边数据集,并设置箭头
  const edges = new vis.DataSet([
    { from: 1, to: 2, arrows: 'to' },
    { from: 1, to: 3, arrows: 'to' },
    { from: 2, to: 3, arrows: 'to' },
    { from: 2, to: 4, arrows: 'to' }
  ]);

  // 获取容器元素
  const container = document.getElementById('mynetwork');

  // 创建数据对象
  const data = {
    nodes: nodes,
    edges: edges
  };

  // 设置网络选项
  const options = {
    edges: {
      arrows: {
        to: {
          enabled: true,
          scaleFactor: 1,
          type: 'arrow' // 'arrow' or 'bar'
        }
      }
    }
  };

  // 初始化网络
  const network = new vis.Network(container, data, options);

  // 监听点击事件
  network.on('click', function (params) {
    if (params.nodes.length > 0) {
      const nodeId = params.nodes[0];
      const nodeData = nodes.get(nodeId);
      const msg = 'Clicked node: ' + JSON.stringify(nodeData, null, 2);
      alert(msg)
      //document.getElementById('eventOutput').innerText = 'Clicked node: ' + JSON.stringify(nodeData, null, 2);
    }
  });
</script>
</body>
</html>

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员查理

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值