【问题标题】:Cytoscape.js animates out of viewport before returningCytoscape.js 在返回之前动画出视口
【发布时间】:2022-01-12 23:11:21
【问题描述】:

是否可以从一个缩放级别的渲染位置平滑动画到另一个缩放级别的渲染位置,所有图形元素都保留在视口内?

这是一个展示我的问题的 jsbin。加载大图后,单击其中一个节点并注意它是如何在屏幕外然后在屏幕上显示动画的。 (您需要视口足够窄。)

https://jsbin.com/mimesam/9/edit?js,output

有没有办法解决这个问题?我真的希望布局动画在默认情况下工作,以便在布局动画期间考虑fit(缩放/平移),以便布局适合的渲染位置彼此平滑地动画。

描述:从几百个元素的图表开始。使用布局生成初始位置。使用足够小的视口,以至于模型位置对于视口来说太大,因此fit 会导致缩放。

然后选择图形的一个子集,并在该子集上调用相同的 fit 布局。

理想情况下,图形的子集应该在一个方向上平滑动画,从原始位置到新位置。

相反,我看到了 swoopy 行为,其中元素在到达模型位置的途中动画出视口,然后开始拟合并动画回到缩放的渲染位置。

【问题讨论】:

  • 我认为这是因为您突然删除元素而没有任何动画。也许您可以隐藏它们而不是删除它们。

标签: javascript animation cytoscape.js


【解决方案1】:

尝试一步一步制作动画

cy.animate({
  fit: { eles: cy.$() },
  duration: 500,
  complete: function () {
    setTimeout(function () {
      cy.layout({
        name: 'breadthfirst',
        animationDuration: 2000,
        animate: true,
        fit: true,
        directed: true,
      }).run();
    }, 500);
  },
});

【讨论】:

  • 谢谢。这是一个好主意,我已经尝试过了。它改善了这种情况,但是当布局开始时,它仍然会随着一些元素超出视口边缘而扩展。效果取决于视口的大小、子图的大小、整个图的大小。
  • 布局一些节点会在短时间内消失。你是这个意思吗?
  • 是的,它们朝一个方向移动,越过视口边缘,然后从另一个方向返回并最终固定到位。
  • @tunesmith 如果你在布局选项中设置了padding: 130,,它就不会发生。是关于布局算法的动画
  • padding: 130 是一个任意值,仅适用于该特定图形和特定面板宽度。 130 在我的屏幕上对我不起作用。 200 确实如此,但代价是结束位置的填充太多。这有点像拥有足够大的视口大小也会使问题消失。这个问题更多的是关于如何在所有情况下平滑地从适合渲染位置到适合渲染位置的动画,而不会使动画暂时超过视口大小。
猜你喜欢
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 2014-09-28
  • 2012-02-11
相关资源
最近更新 更多