D.j*_*nis 5 reactjs react-router
我试图使用react-router和ReactTransitionGroup来产生导航效果(页面幻灯片,而路线更改)。
但是,它容易出错且很丑陋(为定义向哪个方向滑动以及删除/添加类以使过渡工作变得很有逻辑)。
我怀疑是否有任何不错的插件可以使用。
这是我的代码,是受移动Web应用程序/ 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();
});
}
};
Run Code Online (Sandbox Code Playgroud)
小智 2
你可以试试这个
https://github.com/oliviertassinari/react-swipeable-views
部分代码来自github
<SwipeableViews>
<div>
slide 1
</div>
<div>
slide 2
</div>
<div>
slide 3
</div>
</SwipeableViews>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5607 次 |
| 最近记录: |