Ich habe mich gefragt, ob irgendjemand einen Einblick geben könnte, wie man mit React.js einen animierten Komponenten-/Seitenwechsel erreichen kann.React: Animieren eines Seitenwechsels
Was ich erreichen möchte, ist eine Komponente/Seite Übergang wie die auf http://www.semplicelabs.com/ - eine Kopfzeile, die Deckkraft und Rand-Top und einen Inhalt, der die Deckkraft übergeht.
Wenn eine neue Komponente/Seite Übergang neue Komponente/Seite gezeigt wird, sollte die aktuell angezeigte Komponente/Seite transitioning vor die in die ich bisher Was haben ein LayoutComponent
ist, die eine Seite Komponente in eine CSSTransitionGroup
macht.:
import React from 'react/addons';
export default class LayoutComponent extends React.Component {
constructor(props) {
super(props);
this.state = { page: '' };
},
setPage(page) {
this.setState({ page });
}
render() {
return (
<React.addons.CSSTransitionGroup transitionName='page'>
{this.state.page}
</React.addons.CSSTransitionGroup>
);
}
}
ich habe auch zwei Seitenkomponenten, FirstPage
und SecondPage
.
import React from 'react';
export default class FirstPage extends React.Component {
render() {
return (
<div>
<header className='header'>
<div className='container'>
First Header
</div>
</header>
<div className='content'>
<div className='container'>
First Content
</div>
</div>
</div>
);
}
}
Die einzigen Unterschiede zwischen SecondPage
Code und FirstPage
Code sind die Inhalte in dem .container
divs und die Klassen-Namen.
Was ich dann versuchte zu tun, ist eine Pause Übergang mit .8s
Dauer und eine Eingabe Übergang mit beiden .8s
Dauer und Verzögerung. Das Hauptproblem, das ich sehe, ist, dass die neue Seitenkomponente montiert wird, bevor der Übergang der alten Seite beendet ist. Dies ist meine aktuelle CSS:
.page-enter {
background-color: #f2f2f2;
transition: background-color .8s linear .8s;
}
.page-enter-active {
background-color: #f2f1f1;
}
.page-leave {
background-color: #f2f1f1;
transition: background-color .8s linear;
}
.page-leave-active {
background-color: #f2f2f2;
}
.page-enter .header {
margin-top: -80px;
opacity: 0;
transition: opacity .8s ease-in-out .8s;
transition: margin-top .8s ease-in-out .8s;
}
.page-enter-active .header {
margin-top: 0;
opacity: 1;
}
.page-leave .header {
margin-top: 0;
opacity: 1;
transition: opacity .8s ease-in-out;
transition: margin-top .8s ease-in-out;
}
.page-leave-active .header {
margin-top: -80px;
opacity: 0;
}
.page-enter .content {
opacity: 0;
transition: opacity .8s ease-in-out .8s;
}
.page-enter-active .content {
opacity: 1;
}
.page-leave .content {
opacity: 1;
transition: opacity .8s ease-in-out;
}
.page-leave-active .content {
opacity: 0;
}
Ich weiß, dass ich die anfängliche mit transitionAppear={true}
Montag animieren könnte - aber das stimmt nicht mit dem Problem der neuen Komponente nicht helfen, montiert wird, bevor die alte wird umgestellt werden.
Dies ist ein Problem, mit dem ich seit ein paar Tagen Probleme habe und für das ich keine Lösung finden kann.
Einige Code zu spielen, um: https://jsfiddle.net/gonsfx/xva2g6oo/
Haben Sie das Problem lösen können? Ich stecke auch mit diesem Problem fest. –