当前位置: 首页 > news >正文

发现一个很N且免费的html5拓扑图 关系图 生成组件

161654-20170330113711295-1689854194.gif

传送门:http://visjs.org/

demo代码

<!doctype html>
<html>

<head>
    <title>vis.js newwork Demo</title>
    <script src="http://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    <script src="../vis.js"></script>
    <link href="../vis.css" rel="stylesheet" type="text/css" />

    <style type="text/css">
        #mynetwork {
            width: 100%;
            height: 600px;
            border: 1px solid lightgray;
        }
        
        #hisLog {
            width: 100%;
            height: 200px;
            border: 1px solid red;
        }
    </style>
</head>

<body>

    <div id="mynetwork"></div>
    <button id='addTo' value="Begin AddTo">Begin AddTo</button>
    <button id='stop_addTo' value="Stop AddTo">Stop AddTo</button>
    <button id='add_edge'>Begin Add Edge</button>
    <button id='stop_edge'>Stop Add Edge</button>
    <div id="hisLog"></div>
    <script src="./demo.js"></script>
</body>

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

function addNode(id, label, title) {
    nodes.add({
        id: id,
        label: id
    })
    this.addHisLog('node:' + id + ' add to container.');
}

function addEdge(fromId, toId, type) {
    var edge = {
        from: fromId,
        to: toId,
    }
    if (type === 1) {
        edge['label'] = 'releation'
        edge.arrows = 'to'
        edge.color = 'red'
        edge.length = 400
    } else {
        edge['label'] = 'arrows:circle'
        edge.arrows = {
            to: {
                type: 'circle'
            }
        }
        edge.length = 200
    }
    edges.add(edge);
    this.addHisLog('edge:' + fromId + ' ---> ' + toId + ' .type:' + type + ' add to container.');
}

function randomGetNodeId() {
    var names = Object.getOwnPropertyNames(nodes._data);
    var len = names.length;
    var index = Math.floor(Math.random() * len);
    return names[index];
}

function randomAddNode() {
    var type = 0
    if (Math.random() > 0.7)
        type = 1
    var id = Date.now();

    var fId = this.randomGetNodeId()
    this.addNode(id, id, null)
    this.addEdge(fId, id, type)

}

function randomAddEdge() {
    var fId = this.randomGetNodeId()
    var tId = this.randomGetNodeId()
    if (fId == tId)
        return;
    var type = 0
    if (Math.random() > 0.7)
        type = 1
    this.addEdge(fId, tId, type)


}

function addHisLog(message) {
    $('#hisLog').prepend('<div>' + message + '</div>')
    $('#hisLog div').remove('div:gt(8)')
}

network.on("click", function(params) {
    // randomAddNode()
    // if (params.nodes.length == 0)
    //     return;
    // var names = Object.getOwnPropertyNames(nodes._data);
    // var len = names.length;
    // var index = Math.floor(Math.random() * len);
    // var _edgeId = names[index]

    // var id = Date.now();
    // nodes.add({
    //     id: id,
    //     label: id
    // })
    // var edge = {
    //     from: params.nodes[0],
    //     to: id,
    // }
    // if (Math.random() > 0.5) {
    //     edge['label'] = 'releation'
    //     edge.arrows = 'to'
    //     edge.color = 'red'
    // } else {
    //     edge['label'] = '父子'
    //     edge.arrows = {
    //         to: {
    //             type: 'circle'
    //         }
    //     }
    // }
    // edges.add(edge);
});


$('#addTo').click(function() {
    _setIntervalId = setInterval(randomAddNode, 400)
})
$('#stop_addTo').click(function() {
    clearInterval(_setIntervalId)
})
$('#add_edge').click(function() {
    _setIntervalId2 = setInterval(randomAddEdge, 400)
})
$('#stop_edge').click(function() {
    clearInterval(_setIntervalId2)
})

转载于:https://www.cnblogs.com/calvinK/p/6645278.html

相关文章:

  • I2S
  • Oracle11g表空间导入dmp数据
  • Ambari里如何删除某指定的服务(图文详解)
  • CP-ABE ToolKit 安装笔记
  • js数组去重的三种常用方法总结
  • DPDK QoS之分层调度器
  • 对于文本框的验证(考虑兼容问题)
  • 114. Flatten Binary Tree to Linked List (leetcode)
  • 大数据与应用统计学的区别与联系
  • 在ElasticSearch中使用 IK 中文分词插件
  • Ubuntu 16.04 中安装谷歌 Chrome 浏览器
  • SSH使用密钥免密码登录
  • Ajax和跨域问题
  • 使用HTML5的canvas做图片剪裁
  • java异常处理(Exception handing)机制
  • C++类中的特殊成员函数
  • Cumulo 的 ClojureScript 模块已经成型
  • HTML-表单
  • If…else
  • Mocha测试初探
  • Mysql5.6主从复制
  • PHP那些事儿
  • Spring Boot快速入门(一):Hello Spring Boot
  • Vue ES6 Jade Scss Webpack Gulp
  • Vue实战(四)登录/注册页的实现
  • win10下安装mysql5.7
  • 从零开始的无人驾驶 1
  • 官方解决所有 npm 全局安装权限问题
  • 前端自动化解决方案
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 系统认识JavaScript正则表达式
  • 学习JavaScript数据结构与算法 — 树
  • 学习笔记:对象,原型和继承(1)
  • Linux权限管理(week1_day5)--技术流ken
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • !!java web学习笔记(一到五)
  • #include
  • #传输# #传输数据判断#
  • $.ajax中的eval及dataType
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C++)八皇后问题
  • (待修改)PyG安装步骤
  • (二)fiber的基本认识
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (六)Hibernate的二级缓存
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (新)网络工程师考点串讲与真题详解
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET中使用Protobuffer 实现序列化和反序列化