我正在尝试使用ReactCSSTransitionGroup
来对元素高度进行动画处理,
这是我希望实现的动画效果:
http://jsfiddle.net/cherrry/hgk4Lme9/
问题在于我并不总是知道元素的高度,
所以我尝试在componentDidMount
期间利用scrollHeight
、clientHeight
或类似的方式进行调整,并尝试设置node.style.height
或添加样式表规则。
http://jsfiddle.net/cherrry/dz8uod7u/
离开时的动画看起来很好,但当元素进入时,它会闪烁一下,缩放动画看起来奇怪。
这应该是由于询问node.scrollHeight
导致立即发生渲染,所以有没有办法在动画开始之前获取相同的信息并注入CSS规则?或者应该换一种思路考虑?
我对使用max-height
解决方案并不满意,因为当max-height
与height
不接近或较小时,结果的动画速度会非常奇怪,而我的组件的高度确实变化很大。
我可以想象最终的解决方案可能有点混乱, 但我认为将其制作成Mixin,足以在任何地方重复使用它
<AnimateHeight> { this.state.show ? <div class="div-to-show"></div> : null } </AnimateHeight>
。 - blueprintchris<AnimateHeight height={ this.state.show ? 'auto' : 0 }><div class="div-to-show"></div></AnimateHeight>
AnimateHeight 负责可访问性和隐藏内容。 - StankoCSSTransition
组件的开发者应该感到惭愧,因为他们没有像你们一样提供一个易用的API。非常感谢你们。 - messerbill