vis.js 超链接边缘

Rob*_*Rob 4 javascript vis.js vis.js-network

是否可以让超链接在边缘工作?

例如,我有两个连接的节点,并且上面有一个标签

{ id: 1601, label: 'label', x: -1085, y: -429, url: 'link' },
Run Code Online (Sandbox Code Playgroud)

因此,对于上述内容,使用此选项时,该 url 适用于节点

network.on("selectNode", function (params) {
    if (params.nodes.length === 1) {
        var node = nodes.get(params.nodes[0]);
        window.open(node.url, '_blank');
    }
});
Run Code Online (Sandbox Code Playgroud)

现在我使用标准配置在两个节点之间建立了链接

{ from: 1600, to: 1613, label: "label value" },
Run Code Online (Sandbox Code Playgroud)

是否可以让超级链接在连接两个节点的线/边上工作?

gms*_*gms 5

基本上,在代码中将“节点”更改为“边缘”可以在选择边缘时打开 url。但是,选择一个节点也会导致选择所有相邻的边。您只会收到一个selectEdge回调,但在任何情况下都可能想忽略它。如果您想排除某人选择节点的情况,而恰好只有一个连接的边,则添加一项检查,如下所示:

network.on("selectEdge", function(params) {     
    if ((params.edges.length == 1) && (params.nodes.length == 0)) {
        var edgeId = params.edges[0];
         window.open(edges.get(edgeId).url, '_blank');                  
    } 
});
Run Code Online (Sandbox Code Playgroud)

为此使用“select”仍然存在问题。如果您之前选择了一个节点,则会选择相邻的边,即使您由于上述检查而看不到它。如果您随后单击这些相邻边缘之一,则不会收到回调,因为该边缘已被选中。使用该network.on("click" ... )方法可能会更好:

network.on("click", function(params) {                              
    if (params.nodes.length == 1) {
        var nodeId = params.nodes[0];
        if (nodes.get(nodeId).url != null) {
            window.open(nodes.get(nodeId).url, '_blank');
        }           
    } else if (params.edges.length==1) {
        var edgeId = params.edges[0];       
        if (edges.get(edgeId).url != null) {
            window.open(edges.get(edgeId).url, '_blank');
        }           
    } 
});
Run Code Online (Sandbox Code Playgroud)