React-Router 动画 Animation
React-Router动画实际上和React动画没什么区别,都是使用 'react-addons-css-transition-group' 这个组件;但是,和普通的 React-Router 的 App 的写法稍有t不同;
通常我们这样定义一个使用了 React-Router 的组件
export default React.createClass({
render() {
return <div>
{this.props.children}
</div>
}
})
但是当需要使用 ReactCSSTransitonGroup 的时候,需要写成如下:
const App = ({children, location}) => (
<div>
<CSSTransitionGroup
component="div"
transitionName="page"
transitionAppear={true}
transitionAppearTimeout={}
transitionEnterTimeout={}
transitionLeaveTimeout={}>
{React.cloneElement(children, {
key: location.pathname
})}
</CSSTransitionGroup>
</div>
)
上面是一个最基础的使用 ReactCSSTransitonGroup 的 App。
下面是几个示例:
Demo1: 参考自官方示例
var React = require('react');
var ReactDOM = require('react-dom');
var CSSTransitionGroup = require('react-addons-css-transition-group');
var ReactRouter = require('react-router');
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var hashHistory = ReactRouter.hashHistory;
var IndexRoute = ReactRouter.IndexRoute;
var Link = ReactRouter.Link;
const App = ({children, location}) => (
<div>
<ul>
<li><Link to="/page1">Page </Link></li>
<li><Link to="/page2">Page </Link></li>
</ul>
<CSSTransitionGroup
component="div"
transitionName="page"
transitionAppear={true}
transitionAppearTimeout={}
transitionEnterTimeout={}
transitionLeaveTimeout={}>
{React.cloneElement(children, {
key: location.pathname
})}
</CSSTransitionGroup>
</div>
)
const Index = () => (
<div className="Image">
<h1>Index</h1>
<p>Animations with React Router are not different than any other animation.</p>
</div>
)
const Page1 = () => (
<div className="Image">
<h1>Page </h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip exea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est
laborum.</p>
</div>
)
const Page2 = () => (
<div className="Image">
<h1>Page </h1>
<p>Consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est
laborum.</p>
</div>
)
ReactDOM.render((
<Router history={hashHistory}>
<Route path="/" component={App}>
<IndexRoute component={Index}/>
<Route path="page1" component={Page1}/>
<Route path="page2" component={Page2}/>
</Route>
</Router>
), document.getElementById('container'));
Demo2
var React = require('react');
var ReactDOM = require('react-dom');
var CSSTransitionGroup = require('react-addons-css-transition-group');
var ReactRouter = require('react-router');
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var hashHistory = ReactRouter.hashHistory;
var IndexRoute = ReactRouter.IndexRoute;
var Link = ReactRouter.Link;
var Index = ()=>(<div>Index</div>)
var App3 = ()=> (<div className="page1">ABCDEFGHIJKLMN</div>)
var App4 = ()=> (<div className="page2">ABCDEFGHIJKLMNFKFKFKFK</div>)
const App = ({children, location}) => (
<div>
<CSSTransitionGroup
component="div"
transitionName="page"
transitionAppear={true}
transitionAppearTimeout={}
transitionEnterTimeout={}
transitionLeaveTimeout={}>
{React.cloneElement(children, {
key: location.pathname
})}
</CSSTransitionGroup>
</div>
);
ReactDOM.render(
<Router history={hashHistory}>
<Route path="/" component={App}>
<IndexRoute component={Index}/>
<Route path="page1" component={App3}/>
<Route path="page2" component={App4}/>
</Route>
</Router>,
document.getElementById('container'));
Demo3:
还可以不使用如上的方式,转而将每个App都使用 ReactCSSTransitionGroup 封装
var React = require('react');
var ReactDOM = require('react-dom');
var CSSTransitionGroup = require('react-addons-css-transition-group');
var ReactRouter = require('react-router');
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var hashHistory = ReactRouter.hashHistory;
var IndexRoute = ReactRouter.IndexRoute;
var App1 = React.createClass({
handleClick: function () {
this.props.router.push('/page2');
},
render: function () {
return (
<CSSTransitionGroup
transitionName="page"
transitionAppear={true}
transitionAppearTimeout={}
transitionEnterTimeout={}
transitionLeaveTimeout={}>
<div onClick={this.handleClick} className="page1">ABC</div>
</CSSTransitionGroup>
)
}
});
var App2 = React.createClass({
handleClick: function () {
this.props.router.goBack();
},
render: function () {
return (
<CSSTransitionGroup
transitionName="page"
transitionAppear={true}
transitionAppearTimeout={}
transitionEnterTimeout={}
transitionLeaveTimeout={}>
<div onClick={this.handleClick} className="page2">ABCDEFGHIJKLMN</div>
</CSSTransitionGroup>
)
}
});
var App = ()=>(<div>Welcome App</div>)
ReactDOM.render(
<Router history={hashHistory}>
<Route path="/page1" component={App1}></Route>
<Route path="/page2" component={App2}></Route>
</Router>, document.getElementById('container'));
page及相关样式
.page-appear {
opacity: 0.01;
margin-left: %;
-webkit-transition: all .5s;
transition: all .5s;
}
.page-appear.page-appear-active {
margin-left: 0px;
opacity: ;
}
.page-enter {
opacity: 0.01;
margin-left: %;
-webkit-transition: all .5s;
transition: all .5s;
}
.page-enter.page-enter-active {
margin-left: 0px;
opacity: ;
}
.page-leave {
opacity: ;
margin-left: 0px;
-webkit-transition: all .5s;
transition: all .5s;
}
.page-leave.page-leave-active {
margin-left: -%;
opacity: 0.01;
}
.page1 {
position: absolute;
background-color: red;
height: %;
width: %;
min-height: 400px;
}
.page2 {
position: absolute;
background-color: deepskyblue;
height: %;
width: %;
min-height: 400px;
}
.Image {
position: absolute;
height: 400px;
width: 400px;
}
.link-active {
color: #bbbbbb;
text-decoration: none;
}
样式定义参考:[Link]
React-Router 动画 Animation的更多相关文章
- React 附件动画API ReactCSSTransitionGroup
React为动画提供了一个附加组件ReactTransitionGroup,这个附加组件是动画的底层API,并且还提供了一个附件组件ReactCSSTransitionGroup,ReactCSSTr ...
- 最新的chart 聊天功能( webpack2 + react + router + redux + scss + nodejs + express + mysql + es6/7)
请表明转载链接: 我是一个喜欢捣腾的人,没事总喜欢学点新东西,可能现在用不到,但是不保证下一刻用不到. 我一直从事的是依赖angular.js 的web开发,但是我怎么能一直用它呢?看看最近火的一塌糊 ...
- React Router教程
React Router教程 React项目的可用的路由库是React-Router,当然这也是官方支持的.它也分为: react-router 核心组件 react-router-dom 应用于浏览 ...
- React Router API文档
React Router API文档 一.<BrowserRouter> 使用HTML5历史记录API(pushState,replaceState和popstate事件)的<Rou ...
- React Router学习
React Router教程 本教程引用马伦老师的的教程 React项目的可用的路由库是React-Router,当然这也是官方支持的.它也分为: react-router 核心组件 react-ro ...
- React+React Router+React-Transition-Group实现页面左右滑动+滚动位置记忆
2018年12月17日更新: 修复在qq浏览器下执行pop跳转时页面错位问题 本文的代码已封装为npm包发布:react-slide-animation-router 在React Router中,想 ...
- React之动画实现
React之动画实现 一,介绍与需求 1.1,介绍 1,Ant Motion Ant Motion能够快速在 React 框架中使用动画.在 React 框架下,只需要一段简单的代码就可以实现动画效果 ...
- React Router 4.0 体验
React Router 4.0 (以下简称 RR4) 已经正式发布,它遵循React的设计理念,即万物皆组件.所以 RR4 只是一堆 提供了导航功能的组件(还有若干对象和方法),具有声明式(声明式编 ...
- 动画animation的三个应用(漂浮的白云、旋转的星球、正方体合成)
× 目录 [1]漂浮的白云 [2]旋转的星球 [3]正方体合成 前面的话 前面介绍过动画animation的详细用法,本文主要介绍动画animation的三个效果 漂浮的白云 [效果演示] [简要介绍 ...
随机推荐
- 【树莓派】crontab的两个问题
1,/var/log下面,没有cron.log日志 root@raspberrypi:/# nano /etc/rsyslog.conf …… …… ############### #### RULE ...
- Vue 列表渲染及条件渲染实战
条件渲染 有时候我们要根据数据的情况,决定标签是否进行显示或者有其他动作.最常见的就是,表格渲染的时候,如果表格没有数据,就显示无数据.如果有数据就显示表格数据. Vue 帮我们提供了一个v-if的指 ...
- 渡过OO的死劫,了解规格的意义——OO第三次博客总结
当熬过了一次次黑暗,迎接我们的却是被扣的惨不忍睹的JSF ┭┮﹏┭┮ 一.总结调研 规格的历史 传统科学的特点是发现世界,而软件的特点是构造世界.软件的最底层就是0,1,两个离散的值.程序设计语言的三 ...
- web10 动态action的应用
电影网站:www.aikan66.com 项目网站:www.aikan66.com游戏网站:www.aikan66.com图片网站:www.aikan66.com书籍网站:www.aikan66.co ...
- BNUOJ 52308 We don't wanna work! set模拟
题目链接: https://acm.bnu.edu.cn/v3/problem_show.php?pid=52308 We don't wanna work! Time Limit: 60000msM ...
- exFAT移动硬盘写保护怎么去掉
cmd命令提示符下运行chkdsk命令: 比如在E盘,则输入的命令如下: E:(冒号不可少,输入后回车) CHKDSK /F /X (回车) 等命令执行完了,即可去掉exFAT移动硬盘写的保护.
- web安全测试系统
最近写了个简单的web安全实践系统部署到了docker中 下载方式:docker pull ju5ton1y/websecurity github Dockerfile下载地址:https://git ...
- node入门学习(二)
一.模块系统 1.创建模块和引用模块 //如何创建一个模块 exports.hello = function(){ console.log('hello worl'); }; //这创建了一个模块 / ...
- centos6.7 安装JDK
1.卸载JDK 查看系统是否已安装JDK.一般的linux都默认使用了开源的openJDK.显示JDK版本信息,已经安装JDK,否则没有安装.命令行: [root@localhost ~]# ja ...
- 初入码田--ASP.NET MVC4 Web应用之创建一个空白的MVC应用程序
初入码田--ASP.NET MVC4 Web应用开发之一 实现简单的登录 初入码田--ASP.NET MVC4 Web应用开发之二 实现简单的增删改查 2016-07-29 在此之前,需要一台电脑( ...