javascript - 在循环中的节点子集上调用布局无法正确布局节点

标签 javascript cytoscape.js

我有几组节点,我需要每个组都是围绕不同位置的自己的圆圈。

我有一个 for 循环,它将节点添加到图表中,最后获取这些节点,并尝试循环它们。

但是,当我运行该程序时,节点最终采用网格格式。 如何获得预期的行为?

    for( group in groups ){
        cy.add([
                { group:'nodes', data: { id: 1, customgroup: group}, position:{x: 0,y: 0} },
                { group:'nodes', data: { id: 2, customgroup: group}, position:{x: 0,y: 0} },
                { group:'nodes', data: { id: 3, customgroup: group}, position:{x: 0,y: 0} },
                { group:'nodes', data: { id: 4, customgroup: group}, position:{x: 0,y: 0} },
                { group:'nodes', data: { id: 5, customgroup: group}, position:{x: 0,y: 0} },
                { group:'edges', data: { source: '1',target: '2', weight:1} },
                { group:'edges', data: { source: '2',target: '3', weight:1} },
                { group:'edges', data: { source: '3',target: '4', weight:1} },
                { group:'edges', data: { source: '4',target: '5', weight:1} },
                { group:'edges', data: { source: '5',target: '1', weight:1} }
               ]);
        cy.elements('[customgroup="'+group+'"]').layout({ name: 'circle', radius:1, startAngle: 13*((Math.PI)/8)});
    }

感谢您的帮助!

最佳答案

几个小时毫无进展后,我走开,在壁炉里生火,喝了一杯苏格兰威士忌。当我一晚上完全忘记了这个问题时,解决方案突然出现在我的脑海中。

Cytoscape 在初始化时可以选择指定节点的布局。当我实现上述内容时,我从 init 中删除了布局,以避免两次定位节点。

处理这个问题的正确方法是设置:

layout: {
        name: 'preset',
        padding: 10
      },

这使得我的自定义代码能够正确处理所需的行为,并且还可以防止节点的双重定位。

关于javascript - 在循环中的节点子集上调用布局无法正确布局节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33050055/

相关文章:

javascript - 如何为使用 jQuery 动态创建的元素选择表格行?

javascript - 编辑 HTML/CSS 主题但似乎无法使其显示已售罄

javascript - 如何在 javascript 中使用 EventListener 下拉或隐藏和显示子菜单?

Javascript 循环遍历 JSON 对象数组找到实例,但将它们记录为未定义

javascript - Cytoscape.js 动画节点颜色

javascript - 检查窗口是否已从非父窗口打开(chrome 扩展)

javascript - Cytoscape 内容背景

javascript - Cytoscape 的自定义节点渲染器 + 限制拖动点

cytoscape.js - 如何获取 cytoscape.js 中单击节点的 ID?

cytoscape.js:更改容器后鼠标指针位置错误