Ich habe versucht, react-Router und ReactTransitionGroup zu verwenden, um einen Navigationseffekt (Seite Folie, während Route ändert).Wie man Seitenfolie (ändern) mit react-Router
Es ist jedoch fehleranfällig und hässlich. (Viel Logik gemacht, um zu definieren, in welche Richtung zu schieben und Klassen zu entfernen/hinzufügen, um den Übergang zu machen).
Ich bezweifle, es gibt ein nettes Plugin zu verwenden.
Hier ist ein Stück meines Codes, der von Hardware-Accelerated Page Transitions for Mobile Web Apps/PhoneGap Apps inspiriert wurde.
const keyHistory = [];
let dir = 0;
const PageMixin = {
componentWillAppear(cb) {
keyHistory.push(this.props.location.key);
let $el = $(ReactDom.findDOMNode(this));
$el.addClass(pageStyles.right);
$el.one('transitionend',() => {
$el.removeClass(`${pageStyles.right} ${pageStyles.active}`);
cb();
});
requestAnimationFrame(() => {
$el.addClass(`${pageStyles.active} ${pageStyles.center}`);
});
},
componentWillEnter(cb) {
let key = this.props.location.key,
len = keyHistory.length;
if (key === keyHistory[len - 2]) {
keyHistory.pop();
dir = -1;
} else {
keyHistory.push(key);
dir = 1;
}
const fromDir = dir === -1 ? pageStyles.left : pageStyles.right;
let $el = $(ReactDom.findDOMNode(this));
$el.addClass(fromDir);
requestAnimationFrame(() => {
$el.removeClass(fromDir).addClass(`${pageStyles.active} ${pageStyles.center}`);
});
$el.one('transitionend',() => {
$el.removeClass(`${fromDir} ${pageStyles.active}`);
cb();
});
},
componentWillLeave(cb) {
const toDir = dir === -1 ? pageStyles.right : pageStyles.left;
let $el = $(ReactDom.findDOMNode(this));
requestAnimationFrame(() => {
$el.removeClass(pageStyles.center).addClass(`${pageStyles.active} ${toDir}`);
});
$el.one('transitionend',() => {
$el.removeClass(pageStyles.active);
cb();
});
}
};
Ich habe es als Plugin selbst gemacht [react-router-pageslider] (https://github.com/dyf19118/reac-router-pageslider) –