React, Transition Group, Velocity.js - 使路由过渡动画垂直对齐
React, TransitionGroup, Velocity.js - make route tranistion animations align vertically
我正在使用 React TransitionGroup 和 Velocity 为路由之间的转换设置动画。
我正在尝试制作一个简单的动画,其中目标路由组件从左侧滑入,源路由从右侧滑出。
我现在有那个动画 运行,但它们没有垂直对齐。也就是说,新组件被添加到旧组件之上的 dom,所以我们得到下面屏幕截图中的内容。这是我们从编辑导航到预览的时候。表单 header 是编辑的一部分,在预览时被推到底部。
这是 DOM 的动画效果 运行。
我确定我只需要一些 css 即可实现此目的,但不确定如何着手。
预览代码示例:
import React from 'react';
import ReactDom from 'react-dom';
import Velocity from 'velocity-animate';
import 'velocity-animate/velocity.ui';
class Preview extends React.Component{
componentWillEnter(callback){
const el = ReactDom.findDOMNode(this);
if (!el) {
console.error('not el!', el);
}
Velocity(el, 'transition.slideLeftBigIn', {duration: 1000, complete: callback});
}
componentWillLeave (callback) {
const el = ReactDom.findDOMNode(this);
console.log('otw out')
Velocity(el, 'transition.slideRightBigOut', {duration: 1000, complete: callback});
}
render(){
return (
<div>
<h2>Preview</h2>
<img src=""/>
</div>
);
}
}
App.jsx
中的过渡组定义
<TransitionGroup>
{React.cloneElement(this.props.children, {
key: Math.random()
})}
</TransitionGroup>
你用 CSS 解决这个问题的本能是正确的。原因是具有 display: block
和“position: static”的元素将按源顺序垂直堆叠(所有其他条件相同)。
https://jsfiddle.net/ez10xbrv/
您可以将动画组件更改为 position: absolute
,并将它们的容器更改为 position: relative
,这样它们就不会为以前的兄弟姐妹留下 space。请注意,如果您走这条路线,您的容器(示例中的 <span>
)将没有任何自然大小,因此您可能需要为其分配高度和宽度。 CSS Tricks 有一些关于定位的有用信息可能会有所帮助。
我正在使用 React TransitionGroup 和 Velocity 为路由之间的转换设置动画。
我正在尝试制作一个简单的动画,其中目标路由组件从左侧滑入,源路由从右侧滑出。
我现在有那个动画 运行,但它们没有垂直对齐。也就是说,新组件被添加到旧组件之上的 dom,所以我们得到下面屏幕截图中的内容。这是我们从编辑导航到预览的时候。表单 header 是编辑的一部分,在预览时被推到底部。
这是 DOM 的动画效果 运行。
我确定我只需要一些 css 即可实现此目的,但不确定如何着手。
预览代码示例:
import React from 'react';
import ReactDom from 'react-dom';
import Velocity from 'velocity-animate';
import 'velocity-animate/velocity.ui';
class Preview extends React.Component{
componentWillEnter(callback){
const el = ReactDom.findDOMNode(this);
if (!el) {
console.error('not el!', el);
}
Velocity(el, 'transition.slideLeftBigIn', {duration: 1000, complete: callback});
}
componentWillLeave (callback) {
const el = ReactDom.findDOMNode(this);
console.log('otw out')
Velocity(el, 'transition.slideRightBigOut', {duration: 1000, complete: callback});
}
render(){
return (
<div>
<h2>Preview</h2>
<img src=""/>
</div>
);
}
}
App.jsx
中的过渡组定义<TransitionGroup>
{React.cloneElement(this.props.children, {
key: Math.random()
})}
</TransitionGroup>
你用 CSS 解决这个问题的本能是正确的。原因是具有 display: block
和“position: static”的元素将按源顺序垂直堆叠(所有其他条件相同)。
https://jsfiddle.net/ez10xbrv/
您可以将动画组件更改为 position: absolute
,并将它们的容器更改为 position: relative
,这样它们就不会为以前的兄弟姐妹留下 space。请注意,如果您走这条路线,您的容器(示例中的 <span>
)将没有任何自然大小,因此您可能需要为其分配高度和宽度。 CSS Tricks 有一些关于定位的有用信息可能会有所帮助。