反応ルータとReactTransitionGroupを使用してナビゲーションエフェクトを作成しようとしました。反応ルータでページスライドを作成する方法(変更)
しかし、エラーが発生しやすく、醜いです(過渡的な作業をするためにクラスに移動し、クラスを削除/追加する方向を定義するロジックを大いにしました)。
すてきなプラグインがあります。
ここには、Hardware-Accelerated Page Transitions for Mobile Web Apps/PhoneGap Appsからインスピレーションを得たコードがあります。
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();
});
}
};
私は自分でプラグインとして作った[react-router-pageslider](https://github.com/dyf19118/react-router-pageslider) –