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的更多相关文章

  1. React 附件动画API ReactCSSTransitionGroup

    React为动画提供了一个附加组件ReactTransitionGroup,这个附加组件是动画的底层API,并且还提供了一个附件组件ReactCSSTransitionGroup,ReactCSSTr ...

  2. 最新的chart 聊天功能( webpack2 + react + router + redux + scss + nodejs + express + mysql + es6/7)

    请表明转载链接: 我是一个喜欢捣腾的人,没事总喜欢学点新东西,可能现在用不到,但是不保证下一刻用不到. 我一直从事的是依赖angular.js 的web开发,但是我怎么能一直用它呢?看看最近火的一塌糊 ...

  3. React Router教程

    React Router教程 React项目的可用的路由库是React-Router,当然这也是官方支持的.它也分为: react-router 核心组件 react-router-dom 应用于浏览 ...

  4. React Router API文档

    React Router API文档 一.<BrowserRouter> 使用HTML5历史记录API(pushState,replaceState和popstate事件)的<Rou ...

  5. React Router学习

    React Router教程 本教程引用马伦老师的的教程 React项目的可用的路由库是React-Router,当然这也是官方支持的.它也分为: react-router 核心组件 react-ro ...

  6. React+React Router+React-Transition-Group实现页面左右滑动+滚动位置记忆

    2018年12月17日更新: 修复在qq浏览器下执行pop跳转时页面错位问题 本文的代码已封装为npm包发布:react-slide-animation-router 在React Router中,想 ...

  7. React之动画实现

    React之动画实现 一,介绍与需求 1.1,介绍 1,Ant Motion Ant Motion能够快速在 React 框架中使用动画.在 React 框架下,只需要一段简单的代码就可以实现动画效果 ...

  8. React Router 4.0 体验

    React Router 4.0 (以下简称 RR4) 已经正式发布,它遵循React的设计理念,即万物皆组件.所以 RR4 只是一堆 提供了导航功能的组件(还有若干对象和方法),具有声明式(声明式编 ...

  9. 动画animation的三个应用(漂浮的白云、旋转的星球、正方体合成)

    × 目录 [1]漂浮的白云 [2]旋转的星球 [3]正方体合成 前面的话 前面介绍过动画animation的详细用法,本文主要介绍动画animation的三个效果 漂浮的白云 [效果演示] [简要介绍 ...

随机推荐

  1. eclipse以MapReduce本地模式运行程序

    1.准备好所需的文件winutils.exe.hadoop-eclipse-plugin-2.7.3.jar.hadoop-common-2.2.0-bin-master.zip 下载路径:http: ...

  2. 利用Elasticsearch搭建全球域名解析记录

    前言 数据来源,由Rapid7收集并提供下载https://scans.io/study/sonar.fdns 下载Elasticsearch 2.3 ElasticSearch是一个基于Lucene ...

  3. ExternalAccessory串口通信

    ExternalAccessory 使用文档 项目下载地址 前言 公司希望通过串口通信的方式实现苹果手机与公司产品进行通信,通过Lighting接口,也就是苹果的数据线.苹果的API External ...

  4. python基础知识-11-函数装饰器

    python其他知识目录 1.装饰器学习前热身准备 1.1装饰器简介 1.2装饰器热身分析 ) def func(): pass v1 = v2 = func #将函数名赋予一个变量,就和变量赋值是同 ...

  5. nmap命令详解

    基础命令学习目录 原文链接:http://www.cnblogs.com/hongfei/p/3801357.html Nmap即网络映射器对Linux系统/网络管理员来说是一个开源且非常通用的工具. ...

  6. node child_process模块

    NodeJs是一个单进程的语言,不能像Java那样可以创建多线程来并发执行.当然在大部分情况下,NodeJs是不需要并发执行的,因为它是事件驱动性永不阻塞.但单进程也有个问题就是不能充分利用CPU的多 ...

  7. 利用Python编写Windows恶意代码!自娱自乐!勿用于非法用途!

    本文主要展示的是通过使用python和PyInstaller来构建恶意软件的一些poc. 利用Python编写Windows恶意代码!自娱自乐!勿用于非法用途!众所周知的,恶意软件如果影响到了他人的生 ...

  8. Spring MVC controller的方法返回值

    ModeAndView 可以在构造时确定需要跳转的页面也可以通过setViewName方法来确定需要跳转的页面 String 指定返回页面的视图名称,页面跳转,如果加了@ResponseBody注解, ...

  9. Servet3.0于Servlet2.5比较

    Servet3.0于Servlet2.5比较恢复 首先是利用注解代替配置文件 Servlet2.5利用配置文件对Servlet进行配置 例如这样 <servlet> <servlet ...

  10. java List.get

    并不能 用如果List在i位置值不存在 并不能 List.get(i) !=null 判断 会抛异常 版权声明:本文为博主原创文章,未经博主允许不得转载.