javascript - React、TransitionGroup、Velocity.js - 使路由过渡动画垂直对齐

标签 javascript css reactjs velocity.js

我正在使用 React TransitionGroup 和 Velocity 为路由之间的转换设置动画。

我正在尝试制作一个简单的动画,其中目标路由组件从左侧滑入,源路由从右侧滑出。

我现在正在运行该动画,但它们没有垂直对齐。也就是说,新组件被添加到旧组件之上的 dom,所以我们得到下面屏幕截图中的内容。这是我们从编辑导航到预览的时候。表单标题是编辑的一部分,并在预览时被推到底部。

What happens

这是动画运行时 DOM 的样子。

enter image description here

我确定我只需要一些 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所以他们不会为 previous sibling 姐妹留下空间。请注意,如果您走这条路线,您的容器(您的示例中的 <span>)将没有任何自然大小,因此您可能需要为其分配高度和宽度。 CSS Tricks有一些关于定位的有用信息可能会有所帮助。

https://jsfiddle.net/ez10xbrv/1/

关于javascript - React、TransitionGroup、Velocity.js - 使路由过渡动画垂直对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39184582/

相关文章:

javascript - 如何使替代文本在页面上的图像的替代文本中每隔几秒轮流显示一个又一个???使用jquery

javascript - Recaptcha v2 在重置时抛出错误并且其容器元素从 DOM 中移除

javascript - Canvas 鼠标指针未同步

javascript - React - 无法对已卸载的组件执行 React 状态更新

javascript - 将值赋给数组内的数组

javascript - 使用 html css 和 javascript 创建弹出框

边界半径内的 jQuery 动画 div。阻止边界半径在动画中丢失。 fiddle

javascript - 创建实时投票/结果页面

javascript - React Router browserHistory 在本地工作,而不是在生产环境中工作

ios - Xcode 更新后库停止工作。 react native 0.62.2