Dynamic/scrollable Cytoscape 中的容器大小(+ cy.fit() 问题)

Dynamic/scrollable container size in Cytoscape (+ cy.fit() issues)

所以我最近一直在尝试使用 Cytoscape。我项目的目标基本上是一个协作图,人们将能够 add/remove 节点 to/from,使其在此过程中成长。该图将包含许多复合节点。

我见过的大多数示例都使用占据屏幕 space 100% 的容器 div。这对 "controlled" 图表很好,但在我的情况下不起作用,因为它的大小是动态的。

这是一个在固定的 3000px/3000px 容器中使用 circle 布局的 JSFiddle: https://jsfiddle.net/Jeto143/zj8ed82a/5/

  1. 有什么方法可以让容器大小是动态的,而不是明确地声明它?或者我每次都必须以某种方式计算新的最佳容器大小,然后调用 cy.resize()edit:实际上,无论网络有多大,将 100%/100% 用于 cy.fit() 都可能有效,所以如果是这种情况请忽略这个问题。

  2. 是否有推荐的布局以非分层方式显示 large/unknown 数据量,从而 "smartly" 以最有效的方式放置节点(包括复合节点)可能,同时避免任何重叠? (我想这个问题很多...)

  3. 为什么 cy.fit() 在我的示例中似乎不起作用?我在图形初始化和 CTRL+单击节点(以显示封闭的邻域)时都使用它,但它似乎不喜欢 3000x3000px 容器(100%x100% 似乎更好)。 编辑:如果您忽略了 1.,也请忽略此问题,因为 100%/100% 似乎没问题。

任何 help/suggestions 将不胜感激。

非常感谢您。

TLDR:它是 (1)。

Cytoscape 有一个可平移的视口,就像一张地图。您可以在 CSS 中定义视口 (div) 的尺寸。视口中显示的内容是节点位置、缩放级别和平移级别的函数——就像地图视口中可见的内容是缩放、平移和兴趣点位置的函数一样。

所以要么你必须

(a) 在缩放和平移方面重新考虑您的 UI 并使用 Cytoscape 中的内置工具,或者

(b) 在 Cytoscape 中禁用缩放和平移(缩放 1 时可能停留在 (0, 0))并让用户在您向图形添加内容并调整其容器大小时滚动页面 div以适应新内容。