visjs绘图图标动态添加数据
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
visjs绘图图标动态添加数据function doEchartsFun(data){
obj = data;
// vis
var nodes = null;
var edges = null;
var network = null;
var LENGTH_MAIN = 350,
LENGTH_SERVER = 150,
LENGTH_SUB = 50,
WIDTH_SCALE = 2,
RED = 'red',
ORANGE = 'orange',
ERROR='black',
GRAY = 'yellow';
nodes = [];
edges = [];
// console.log(data)
for(var i = 0;i < data.hostlist.length;i++){
nodes.push(obj.hostlist[i]);
}
for(var i = 0;i < data.line.length;i++){
edges.push(obj.line[i]);
}
// 添加图例
// var mynetwork = document.getElementById("ec");
// var x = - mynetwork.clientWidth -200 ;
// var y = - mynetwork.clientHeight -50 ;
// var step = 70;
// nodes.push({id: 1000, x: x, y: y, label: '',group: 'sj', value: 10, fixed: true, physics:false});
// nodes.push({id: 1001, x: x, y: y + step, label: '', group: 'fk', value: 10, fixed: true, physics:false});
// nodes.push({id: 1002, x: x, y: y + 2 * step, label: '', group: 'wj', value: 10, fixed: true, physics:false});
// nodes.push({id: 1003, x: x, y: y + 3 * step, label: 'Computer', group: 'desktop', value: 1, fixed: true, physics:false}); // nodes.push({id: 1004, x: x, y: y + 4 * step, label: 'Smartphone', group: 'mobile', value: 1, fixed: true, physics:false}); removeLoading('test');
// create a network
var container = document.getElementById('ec');
var data = {
nodes: nodes,
edges: edges
};
var options = {
nodes: {
font:{
color: "white", //字体的颜⾊
size: 30 //显⽰字体⼤⼩
},
scaling: {
min: 16,
max: 32 //缩放效果⽐例
},
borderWidth: 0,
color: {
border: 'white',
background: 'white' 若是引⽤图标,背景颜⾊
},
},
groups: {
"ws":{ //系统定义的形状 dot等这些官⽹都可以找到
shape:'dot',
color:"white"
}
},
edges: { 连接线的样式
color: {
color:'white',
highlight:'white',
hover: '#848484',
inherit: 'from',
opacity:1.0
},
},
layout:{
randomSeed:1,//配置每次⽣成的节点位置都⼀样,参数为数字1、2等
},
physics:{
barnesHut:{gravitationalConstant:-30000},
stabilization: {iterations:2500}
},
interaction: {
// navigationButtons: true,
hover: true,//⿏标移过后加粗该节点和连接线
selectConnectedEdges:false,//选择节点后是否显⽰连接线
hoverConnectedEdges:false,//⿏标滑动节点后是否显⽰连接线
tooltipDelay:200,
zoomView:true//是否能缩放画布
},
edges: {
shadow:true,//连接线阴影配置
smooth: true,//是否显⽰⽅向箭头
// arrows: {to : true }//箭头指向from节点
}
};
network = new work(container, data, options);
var nodes_data = network.body.data.nodes._data;
network.on("click", function(params) { //每个点的操作时间,官⽹有详细案例可查询
// var ip = params.nodes;
// console.log(params)
// if(ip != ""){
// $.ajax({
// url:"/homes/",
// type:"get",
// dataType:"JSON",
// data:{
// whichIP:ip
// },
// beforeSend:function(xhr){
//
// },
// success:function(data){
// },
// error:function(XMLHttpRequest, textStatus, errorThrown){
// console.log("连接主机错误,请重启~~!")
// }
// })
// }
});
最重要的是nodes 和edges的拼接,
point = {"id":id, "label":"显⽰数据", "shape": 'image', "image": '..\\static\\img\\sypic\\'+group+'.svg'} //image 指的是显⽰图⽚形状,官⽹还有另外圆形显⽰,后⾯的是图⽚路径line = {"from": y, "to": m} //线就是简单的from to 。
当然,这都是point固定的id,
接收之后就能只做⾃⼰想要的canvas 关系图了,感觉还是蛮不错的效果的,关键是唬⼈。
但是⼜有了新的需求了,要求发现⼀个新的数据就要实时显⽰在上⾯,这就⽤到了⼀个新的属性(DataSet)
function draw(data) {
// vis
var nodes = null;
var edges = null;
var network = null;
var nodesArray, nodes, edgesArray, edges, network;
var LENGTH_MAIN = 350,
LENGTH_SERVER = 150,
LENGTH_SUB = 50,
WIDTH_SCALE = 2,
RED = 'red',
ORANGE = 'orange',
ERROR='black',
GRAY = 'yellow';
nodesArray = [];
edgesArray = [];
for(var i = 0;i < data.hostlist.length;i++){
nodesArray.push(obj.hostlist[i]);
}
for(var i = 0;i < data.line.length;i++){
edgesArray.push(obj.line[i]);
}
nodes = new vis.DataSet(nodesArray);
edges = new vis.DataSet(edgesArray);
setTimeout(function(){
nodes.add({id:"55854663541321654", shape: "image",label:"haha", image: "../static/img/sypic/web.svg"});
console.log(nodes)
},1000)
setTimeout(function(){
edges.add({from:"55854663541321654", to:"5b569a9e812e721634a6b2c3",value:"5"});
},1000)
removeLoading('test');
// create a network
var container = document.getElementById('ec');
var data = {
nodes: nodes,
edges: edges
};
var options = {
nodes: {
font:{
color: "white",
size: 30
},
scaling: {
min: 16,
max: 32
},
borderWidth: 0,
color: {
border: 'white',
background: 'white'
},
},
groups: {
},
edges: {
color: {
color:'white',
highlight:'white',
hover: '#848484',
inherit: 'from',
opacity:1.0
},
},
layout:{
randomSeed:1,//配置每次⽣成的节点位置都⼀样,参数为数字1、2等
},
physics:{
barnesHut:{gravitationalConstant:-30000},
stabilization: {iterations:2500}
},
interaction: {
// navigationButtons: true,
hover: true,//⿏标移过后加粗该节点和连接线
selectConnectedEdges:false,//选择节点后是否显⽰连接线
hoverConnectedEdges:false,//⿏标滑动节点后是否显⽰连接线
tooltipDelay:200,
zoomView:true//是否能缩放画布
},
edges: {
shadow:true,//连接线阴影配置
smooth: true,//是否显⽰⽅向箭头
// arrows: {to : true }//箭头指向from节点
}
};
network = new work(container, data, options);
}
关键看两个定时器添加,到时候把定时器添加的过程⽤websocket 替换掉就可以,当然,websocket传递过来的数据⼀定要是新添加过来的数据了,就得数据不能重复了,⼀定要看清数据数组的名称,以免混乱造成不必要的浪费时间,
只要是新数据添加进去了,dataset就会⾃动将数据添加到图形当中。