reactjs - pose - ¿Cómo animar la altura del elemento en React con ReactCSSTransitionGroup?
react transition group csstransition (2)
Después de un poco más de experimento, he encontrado una solución al utilizar el API ReactTransitionGroup
bajo nivel en lugar del ReactTransitionGroup
de alto nivel
Aquí está el JSFiddle con una solución de trabajo: http://jsfiddle.net/cherrry/0wgp34cr/
Antes de la animación, está haciendo 3 cosas:
- Obtener altura computada, rellenos y márgenes.
- oculte el elemento con la
display: none
y agregue.anim-enter
para establecer la altura en 0 - crear una regla css para
.anim-enter-active
Para comenzar la animación, está haciendo 2 cosas:
- mostrar el elemento
- Agrega
.anim-enter-active
para comenzar la animación
Algunos números y el nombre de la clase en JSFiddle fueron codificados, pero debería ser lo suficientemente fácil como para transformar el "mixin" en una clase React como un reemplazo de ReactCSSTransitionGroup
Estoy tratando de animar la altura del elemento con ReactCSSTransitionGroup
, así es como querría que se vea la animación:
http://jsfiddle.net/cherrry/hgk4Lme9/
El problema es que no siempre conozco la altura del elemento, así que intenté hackear scrollHeight
, clientHeight
o algo similar durante componentDidMount
e intenté establecer node.style.height
o agregar reglas a la hoja de estilo
http://jsfiddle.net/cherrry/dz8uod7u/
Dejar la animación se ve bien, sin embargo, cuando el elemento ingresa, parpadea un poco y la animación de escala se ve extraña
Debería ser por preguntar a node.scrollHeight
causó que el renderizado se produjera inmediatamente, así que ¿hay alguna forma de obtener la misma información e inyectar reglas css antes de que comience la animación? ¿O debería pensar de otra manera?
No estoy muy satisfecho con la solución de max-height
, ya que la velocidad de animación resultante será muy extraña cuando max-height
no esté cerca de la height
o sea menor, y la height
mis componentes varía mucho.
Podría imaginar que la solución final podría ser un poco desordenada, pero creo que convertirla en un Mixin será lo suficientemente agradable como para reutilizarla en cualquier lugar
Tuve un mismo problema y terminé escribiendo un componente independiente para animar la altura.
Puede ver la demostración aquí: https://stanko.github.io/react-animate-height/
Es mucho más fácil de usar y toda la biblioteca es muy pequeña (~ 200 líneas)
<AnimateHeight
duration={ 500 }
height={ ''auto'' }
>
<h1>Your content goes here</h1>
<p>Put as many React or HTML components here.</p>
</AnimateHeight>
Lo siento por la auto promoción descarada, pero creo que puede ahorrarle mucho tiempo si tiene más de un componente para animar.
¡Aclamaciones!