【发布时间】:2015-01-27 16:37:31
【问题描述】:
我有一个带有分数的项目列表,按分数排序,由 react.js 呈现为垂直方向的矩形项目列表(最高分数在顶部)。对单个项目的悬停和其他点击可能会显示/隐藏额外信息,从而改变它们的垂直高度。
新信息的到来会稍微改变分数,在重新排序后,一些项目的排名更高,而另一些项目的排名更低。我希望这些项目同时动画到它们的新位置,而不是立即出现在它们的新位置。
在 React.js 中是否有推荐的方法来做到这一点,也许使用流行的插件?
(在过去使用 D3 的类似情况下,我使用的一种技术大致是:
- 以自然顺序和相对定位显示带有项目 DOM 节点的列表。通过相对定位,其他小的变化(CSS 或 JS 触发)在单个项目的范围内按预期移动其他项目。
- 在一个步骤中改变所有 DOM 节点,使其实际的相对坐标成为新的绝对坐标 - 一种不会导致视觉变化的 DOM 更改。
- 将项目 DOM 节点在其父项中重新排序为新的排序顺序 - 另一个不会导致视觉变化的 DOM 更改。
- 根据新排序中所有先前项目的高度,将所有节点的顶部偏移设置为新的计算值。这是唯一视觉上活跃的步骤。
- 将所有项目 DOM 节点变回非偏移相对定位。同样,这不会导致视觉上的变化,但是现在相对定位的 DOM 节点,按照底层列表的自然顺序,将通过适当的移动来处理内部悬停/展开/等样式变化。
现在我希望以类似 React 的方式获得类似的效果...)
【问题讨论】:
-
你可能想看看:github.com/chenglou/react-tween-state(我至今没用过,但已经计划了很多次了:)
-
确实看到 react-tween-state 提醒了我一段时间以来我一直在想这个问题,并提出了我的问题。看起来它可能是可用的,像我之前的 D3 方法一样有一些多步骤的黑客攻击......但仍然希望 React 社区中已经存在强烈推荐/优化的方法。
-
我刚刚找到了这个。看起来和你描述的很接近……而且感觉非常好。 MixItUp
-
MixItUp 很漂亮!而且,非常像我正在寻找的视觉效果。 (我之前使用过,甚至购买过 Metafizzy 的类似 Isotope 的许可证,然后才决定采用上面大致描述的 D3 方法。)但是,现在我专门寻找基于 React.js(并且免费/开源)方法。所以在某种程度上,问题是:如何以对 React 友好的方式实现 MixItUp/Isotope-like 效果?
标签: javascript jquery css reactjs