本文介绍react相关的过渡动画效果的实现

有点类似vue的transition组件,主要用于组件mount和unmount之前切换时应用动画效果

  1. 安装

    1. cnpm install react-transition-group --save
  2. transition动画

    1. import React from 'react'
    2. import ReactDOM from 'react-dom'
    3. import Transition from 'react-transition-group/Transition';
    4. const duration = 300;
    5. const defaultStyle = {
    6. transition: `opacity ${duration}ms ease-in-out`,
    7. opacity: 0,
    8. width: "100px",
    9. height: "100px",
    10. background: "red"
    11. }
    12. const transitionStyles = {
    13. entering: { opacity: 0 },
    14. entered: { opacity: 1 },
    15. };
    16. class MyComponent extends React.Component {
    17. constructor() {
    18. super();
    19. this.state = {
    20. in: false
    21. }
    22. }
    23. toggleEnterState = () => {
    24. this.setState({in: !this.state.in})
    25. }
    26. render() {
    27. return (
    28. <div>
    29. <Transition in={this.state.in} timeout={1000} mountOnEnter={true} unmountOnExit={true}>
    30. {(state) => (
    31. <div style={{
    32. ...defaultStyle,
    33. ...transitionStyles[state]
    34. }}>
    35. I'm A fade Transition!
    36. </div>
    37. )}
    38. </Transition>
    39. <button onClick={this.toggleEnterState}>Click to Enter</button>
    40. </div>
    41. )
    42. }
    43. }
    44. ReactDOM.render(
    45. <MyComponent/>,
    46. document.getElementById('root')
    47. )
  3. transition动画配套api

    1. ** children
    2. 指的是Transition标签包含的待应用动画的元素,可以使用react的元素,也可以直接用函数,函数可以接受state参数
    3. state的代表动画的4个状态
    4. entering
    5. entered
    6. exiting
    7. exited
    8. ** in
    9. 应用于Transition标签上面,切换enterexit,从而出现动画效果,布尔值
    10. ** mountOnEnter
    11. 在元素enter的时候才挂载,布尔值
    12. ** unmountOnExit
    13. 在元素exit的时候销毁,布尔值
    14. ** appear
    15. 默认情况下Transition初次挂载的时候不应用动画
    16. 设置为apear之后,会自动应用一次enter动画
    17. 布尔值
    18. ** enter
    19. 是否启用enter时候的动画,布尔值
    20. 作用和设置timeout0一样
    21. ** exit
    22. 是否启用exit时候的动画,布尔值
    23. 作用和设置timeout0一样
    24. ** timeout
    25. 过渡的持续时间,必须设置此值,除非addEventListener提供了
    26. timeout = {500}或者
    27. timeout = {{
    28. enter: 300,
    29. exit: 500
    30. }}
    31. ** addEndListener
    32. 用来监听dom节点的transition结束事件
    33. addEndListener = {
    34. (node,done) => {
    35. node.addEventListener('transitionend', function(){
    36. alert(111);
    37. });
    38. done();
    39. }
    40. }
    41. nodedom元素节点,done是切换状态的回调函数
    42. ** onEnter
    43. 用来监听 enter 状态的钩子函数
    44. onEnter={
    45. (node,isAppearing) => {console.log(node,isAppearing)
    46. }
    47. nodedom节点
    48. isAppearingappear属性值
    49. 另外 onEntering onEntered用法类似
    50. ** onExit
    51. 用来监听 exit 状态开始触发的钩子函数
    52. onExit={
    53. (node) => {console.log(node)
    54. }
    55. 另外 onExiting onExited 用法类似
  4. animate动画

    1. ** index.js
    2. import React from 'react'
    3. import ReactDOM from 'react-dom'
    4. import { CSSTransition } from 'react-transition-group';
    5. import './index.css';
    6. const defaultStyle = {
    7. width: "100px",
    8. height: "100px",
    9. background: "red"
    10. }
    11. class MyComponent extends React.Component {
    12. constructor() {
    13. super();
    14. this.state = {
    15. in: true
    16. }
    17. }
    18. toggleEnterState = () => {
    19. this.setState({in: !this.state.in})
    20. }
    21. render() {
    22. return (
    23. <div>
    24. <CSSTransition in={this.state.in} timeout={500} classNames='bounceInLeft'>
    25. {(state) => (
    26. <div style={{
    27. ...defaultStyle
    28. }}>
    29. I'm A fade Transition!
    30. </div>
    31. )}
    32. </CSSTransition>
    33. <button onClick={this.toggleEnterState}>Click to Enter</button>
    34. </div>
    35. )
    36. }
    37. }
    38. ReactDOM.render(
    39. <MyComponent/>,
    40. document.getElementById('root')
    41. )
    42. ** index.css
    43. @keyframes bounceInLeft {
    44. from, 60%, 75%, 90%, to {
    45. animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    46. }
    47. 0% {
    48. opacity: 0;
    49. transform: translate3d(-3000px, 0, 0);
    50. }
    51. 60% {
    52. opacity: 1;
    53. transform: translate3d(25px, 0, 0);
    54. }
    55. 75% {
    56. transform: translate3d(-10px, 0, 0);
    57. }
    58. 90% {
    59. transform: translate3d(5px, 0, 0);
    60. }
    61. to {
    62. transform: none;
    63. }
    64. }
    65. @keyframes bounceOutRight {
    66. 20% {
    67. opacity: 1;
    68. transform: translate3d(-20px, 0, 0);
    69. }
    70. to {
    71. opacity: 0;
    72. transform: translate3d(2000px, 0, 0);
    73. }
    74. }
    75. .bounceInLeft-enter{
    76. animation: bounceInLeft 1s 1;
    77. }
    78. .bounceInLeft-exit{
    79. animation: bounceOutRight 1s 1;
    80. }
  5. animate动画配套api

    1. ** classNames
    2. 用在CSSTransition标签上面,自动添加状态后缀名
    3. classNames = "demo";
    4. 会依次应用 demo-enter,demo-enter-active,demo-exit,demo-exit-active,demo-appear,demo-appear-active
    5. 如果单独制定classname的话可以使用如下
    6. classNames = {{
    7. appear: 'demo1',
    8. appearActive: 'demo2',
    9. enter: 'demo3',
    10. enterActive: 'demo4',
    11. exit: 'demo5',
    12. exitActive: 'demo6'
    13. }}
    14. ** onEnter
    15. enter或者appear类应用完成后立马调用回调函数
    16. onEnter={
    17. (node,isAppearing) => {console.log(node,isAppearing)}
    18. }
    19. ** onEntering
    20. enter-active或者appear-active应用完成后立马调用回调函数
    21. onEntering={
    22. (node,isAppearing) => {console.log(node,isAppearing)}
    23. }
    24. ** onEntered
    25. enter或者appear移除完成后立马调用回调函数
    26. onEntered={
    27. (node,isAppearing) => {console.log(node,isAppearing)}
    28. }
    29. ** onExit
    30. exit类应用完成后立即调用回调函数
    31. onEntered={
    32. (node) => {console.log(node)}
    33. }
    34. ** onExiting
    35. exit-active类应用完成后立即调用回调函数
    36. onExiting={
    37. (node) => {console.log(node)}
    38. }
    39. ** onExited
    40. exit类移除后立即调用
    41. onExited={
    42. (node) => {console.log(node)}
    43. }
  6. TransitionGroup

    1. 专门处理列表动画而诞生的组件,只要在TransitionGroup中的元素减少或者增加,自动为Transition或者CSSTransition应用in属性
    2. import React from 'react'
    3. import ReactDOM from 'react-dom'
    4. import Transition from 'react-transition-group/Transition';
    5. import {TransitionGroup} from 'react-transition-group'
    6. const duration = 300;
    7. const defaultStyle = {
    8. transition: `opacity ${duration}ms ease-in-out`,
    9. opacity: 0,
    10. width: "100px",
    11. height: "100px",
    12. background: "red"
    13. }
    14. const transitionStyles = {
    15. entering: { opacity: 0 },
    16. entered: { opacity: 1 },
    17. };
    18. class MyComponent extends React.Component {
    19. constructor() {
    20. super();
    21. this.state = {
    22. arr: ['a','c','d','e']
    23. }
    24. }
    25. addItem = () => {
    26. this.setState({
    27. arr: this.state.arr.concat(['f'])
    28. });
    29. }
    30. render() {
    31. return (
    32. <div>
    33. <TransitionGroup component="span" appear>
    34. {this.state.arr.map( (item,index) => (
    35. <Transition key={index} timeout={0}>
    36. {(state) => (
    37. <div style={{
    38. ...defaultStyle,
    39. ...transitionStyles[state]
    40. }}>
    41. {item}
    42. </div>
    43. )}
    44. </Transition>
    45. ) )}
    46. </TransitionGroup>
    47. <button onClick={this.addItem}>添加元素</button>
    48. </div>
    49. )
    50. }
    51. }
    52. ReactDOM.render(
    53. <MyComponent/>,
    54. document.getElementById('root')
    55. )
  7. TransitionGroup配套api

    1. ** component
    2. 默认TransitionGroup是渲染成div,可以通过指定component改变这一默认行为
    3. ** appear
    4. 是否执行初次渲染enter动画
    5. ** enter
    6. 是否开启enter动画
    7. ** exit
    8. 是否开启exit动画
    9. ** childFactory
    10. 此函数是TransitionGroup将要展示子元素的拦截器
    11. childFactory={(el) => {console.log(el);return el}}

react过渡动画效果的实现,react-transition-group的更多相关文章

  1. 067——VUE中vue-router之使用transition设置酷炫的路由组件过渡动画效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. vue过渡动画效果

    1 过渡基础 1.1 过渡的方式 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果. 包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS ...

  3. React实现动画效果

    流畅.有意义的动画对于移动应用用户体验来说是非常必要的.和React Native的其他部分一样,动画API也还在积极开发中,不过我们已经可以联合使用两个互补的系统:用于全局的布局动画LayoutAn ...

  4. 63、具有过渡动画效果的布局Layout

    下面,下来看一个Demo的效果,代码如下: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android ...

  5. 64、具有过渡动画效果的布局Layout( 2 )

    [ CoordinatorLayout-与手势完美结合的滑动视图 ] [ AppBarLayout-可以随手势滑动的AppBar ] <android.support.design.widget ...

  6. react中使用css动画效果

    index.js import React, { Component, Fragment } from 'react'; class App extends Component { construct ...

  7. CSS中的变形、过渡、动画效果

    一.变形 .过渡效果 1:元素平移 x方向 y方向 transform:translate(100px 100px); 2:过渡动画效果 a:什么属性参与过渡效果 b:过渡时间 c:过渡的效果 值包含 ...

  8. css动画效果之transition(动画过渡效果属性)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Vue.js 第3章 axios&Vue过渡动画

    promise 它将我们从回调地狱中解脱出来 创建和使用 var fs = require('fs') // 创建promise // reslove表示执行成功后调用的回调函数 // reject表 ...

随机推荐

  1. 解析3级JSON的例子

    我们都知道现在Ajax盛行,而且前后台数据交流的格式已经换成了JSON了.虽然我对这种做法还是有点担忧的,如果用户关闭了JavaScript怎么办?但是这些担忧还是不能阻止Ajax的盛行和JSON数据 ...

  2. phalcon查询:单条查询,多条查询,多表查询

    单条查询, $order = \OrderMain::findFirst("oid='" . $oid . "'"); 多条查询, $shop = \Order ...

  3. Unity3D-UGUI图集打包与动态使用(TexturePacker)

    参考地址: http://blog.csdn.net/cjsen/article/details/52487706 今天做项目大佬看我在做图集,就跟我说可以用工具打包图集,也就是TexturePack ...

  4. if 条件判断 和 判断总结---shell脚本

    本文主要介绍了Shell脚本IF条件判断和判断条件总结,本文先是给出了IF条件判断的语法,然后给出了常用的判断条件总结,需要的朋友可以参考下. 前言: 无论什么编程语言都离不开条件判断.SHELL也不 ...

  5. Microsoft MVC3 框架

             1. 安装MVC3框架 官网:http://www.asp.net/mvc 下载:ASP.NET MVC3 with Tools http://go.microsoft.com/fw ...

  6. 如何在阿里云上部署war包到tomcat服务器

    一. 准备工作:xshell和xftp 首先我们得确保,xshell能够远程连接阿里云ECS,xftp能够保证windows和linux之间的文件传输(当然也可以选择FileZilla,但xftp感觉 ...

  7. Python爬虫之利用BeautifulSoup爬取豆瓣小说(一)——设置代理IP

    自己写了一个爬虫爬取豆瓣小说,后来为了应对请求不到数据,增加了请求的头部信息headers,为了应对豆瓣服务器的反爬虫机制:防止请求频率过快而造成“403 forbidden”,乃至封禁本机ip的情况 ...

  8. 【Oracle】异常信息的加工处理

    引言     很多时候,我们调用oracle存储过程都会发生各种各样的异常信息,例如ORA-12899值过大,ORA-01400不能插入空值等.虽然说这类异常是前端没控制到位的缘故,但是现实很难100 ...

  9. Git_学习_09_指定某些文件不上传

    一.前言 在git提交文件到远程分支时,可能有些文件我们并不想上传. 这时可以使用如下命令来将这些文件从暂存区移除 git rm --cached "文件路径" 注:git add ...

  10. Spring_总结_04_高级配置(五)_运行时注入值

    一.前言 本文承接上一节:Spring_总结_04_高级配置(四)_bean的作用域 当讨论依赖注入的时候,我们通常所讨论的是将一个bean引用注入到另一个bean的属性或者构造参数中.它通常指的是将 ...