如何在 vis.js 中隐藏图的分支?
How to hide graph's branch in vis.js?
我可以通过单击以下节点 1205
来显示 vis.js 中的部分图表,但无法弄清楚如何使展开的部分在第二次单击时消失同一个节点?
var nodes = new vis.DataSet([
{id: 2696, label: "l"},
{id: 1205, label: "l"},
{id: 2697, label: "l"}
]);
var edges = new vis.DataSet([
{from: 2696, to: 2697},
{from: 2696, to: 1205}
]);
var container = document.getElementById('mynetwork');
var data = {
nodes: nodes,
edges: edges
};
var network = new vis.Network(container, data, {});
network.on("click", function(e) {
tw_id = 1205;
if (e.nodes[0] == tw_id) {
sel_id = e.nodes[0];
var node = nodes.get(e.nodes[0]);
nodes.add([
{id: 2021, label: "l"},
{id: 2047, label: "l"}
]);
edges.add([
{from: 1205, to: 2021},
{from: 1205, to: 2047}
]);
nodes.update(node);
}
});
#mynetwork {
width: 400px;
height: 300px;
border: 1px solid lightgray;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.17.0/vis.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.17.0/vis.min.js"></script>
<div id="mynetwork"></div>
只要您跟踪哪些节点和边是给定节点的扩展区域的一部分,您始终可以使用 vis.js 更新功能隐藏它们。例如,要隐藏 id 为 'id1' 的节点,您可以调用:
nodes.update([{id: 'id1', hidden: true}]);
(请注意更新需要一个数组作为参数)。同理,调用隐藏边:
edges.update([{id: 'edge1', hidden: true}]);
希望对您有所帮助!
下面是一个示例,说明如何根据@pgoldweic 的选项以及预定义每次在节点 1205 上单击将显示/不显示的边和节点来实现此功能。
代码维护一个布尔值来指示下一个操作是显示还是隐藏其他节点。针对 hidden
属性 显示 false
隐藏 true
。
var nodes = new vis.DataSet([
{id: 2696, label: "2696", hidden: false},
{id: 1205, label: "1205", hidden: false},
{id: 2697, label: "2697", hidden: false},
{id: 2021, label: "2021", hidden: true},
{id: 2047, label: "2047", hidden: true}
]);
var edges = new vis.DataSet([
{id: 'e1', from: 2696, to: 2697, hidden: false},
{id: 'e2', from: 2696, to: 1205, hidden: false},
{id: 'e3', from: 1205, to: 2021, hidden: true},
{id: 'e4', from: 1205, to: 2047, hidden: true}
]);
var container = document.getElementById('mynetwork');
var data = {
nodes: nodes,
edges: edges
};
var network = new vis.Network(container, data, {});
// true=hide; false=show
var toggle = false;
network.on("click", function(e) {
tw_id = 1205;
if (e.nodes[0] == tw_id) {
nodes.update([
{id: 2021, hidden: toggle},
{id: 2047, hidden: toggle}
]);
edges.update([
{id: 'e3', hidden: toggle},
{id: 'e4', hidden: toggle}
]);
network.fit();
// switch toggle
toggle = !toggle;
}
});
#mynetwork {
width: 400px;
height: 300px;
border: 1px solid lightgray;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.17.0/vis.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.17.0/vis.min.js"></script>
<div id="mynetwork"></div>
我可以通过单击以下节点 1205
来显示 vis.js 中的部分图表,但无法弄清楚如何使展开的部分在第二次单击时消失同一个节点?
var nodes = new vis.DataSet([
{id: 2696, label: "l"},
{id: 1205, label: "l"},
{id: 2697, label: "l"}
]);
var edges = new vis.DataSet([
{from: 2696, to: 2697},
{from: 2696, to: 1205}
]);
var container = document.getElementById('mynetwork');
var data = {
nodes: nodes,
edges: edges
};
var network = new vis.Network(container, data, {});
network.on("click", function(e) {
tw_id = 1205;
if (e.nodes[0] == tw_id) {
sel_id = e.nodes[0];
var node = nodes.get(e.nodes[0]);
nodes.add([
{id: 2021, label: "l"},
{id: 2047, label: "l"}
]);
edges.add([
{from: 1205, to: 2021},
{from: 1205, to: 2047}
]);
nodes.update(node);
}
});
#mynetwork {
width: 400px;
height: 300px;
border: 1px solid lightgray;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.17.0/vis.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.17.0/vis.min.js"></script>
<div id="mynetwork"></div>
只要您跟踪哪些节点和边是给定节点的扩展区域的一部分,您始终可以使用 vis.js 更新功能隐藏它们。例如,要隐藏 id 为 'id1' 的节点,您可以调用:
nodes.update([{id: 'id1', hidden: true}]);
(请注意更新需要一个数组作为参数)。同理,调用隐藏边:
edges.update([{id: 'edge1', hidden: true}]);
希望对您有所帮助!
下面是一个示例,说明如何根据@pgoldweic 的选项以及预定义每次在节点 1205 上单击将显示/不显示的边和节点来实现此功能。
代码维护一个布尔值来指示下一个操作是显示还是隐藏其他节点。针对 hidden
属性 显示 false
隐藏 true
。
var nodes = new vis.DataSet([
{id: 2696, label: "2696", hidden: false},
{id: 1205, label: "1205", hidden: false},
{id: 2697, label: "2697", hidden: false},
{id: 2021, label: "2021", hidden: true},
{id: 2047, label: "2047", hidden: true}
]);
var edges = new vis.DataSet([
{id: 'e1', from: 2696, to: 2697, hidden: false},
{id: 'e2', from: 2696, to: 1205, hidden: false},
{id: 'e3', from: 1205, to: 2021, hidden: true},
{id: 'e4', from: 1205, to: 2047, hidden: true}
]);
var container = document.getElementById('mynetwork');
var data = {
nodes: nodes,
edges: edges
};
var network = new vis.Network(container, data, {});
// true=hide; false=show
var toggle = false;
network.on("click", function(e) {
tw_id = 1205;
if (e.nodes[0] == tw_id) {
nodes.update([
{id: 2021, hidden: toggle},
{id: 2047, hidden: toggle}
]);
edges.update([
{id: 'e3', hidden: toggle},
{id: 'e4', hidden: toggle}
]);
network.fit();
// switch toggle
toggle = !toggle;
}
});
#mynetwork {
width: 400px;
height: 300px;
border: 1px solid lightgray;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.17.0/vis.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.17.0/vis.min.js"></script>
<div id="mynetwork"></div>