文章目录

  • React的过渡动画
    • 过渡动画库的介绍
    • CSSTransition(掌握)
    • SwitchTransition(了解)
    • TransitionGroup(了解)

React的过渡动画

过渡动画库的介绍

在开发中,我们想要给一个组件的显示和消失添加某种过渡动画,可以很好的增加用户体验

当然,我们可以通过原生的CSS来实现这些过渡动画,但是React社区为我们提供了react-transition-group用来完成过渡动画。

React曾为开发者提供过动画插件 react-addons-css-transition-group,后由社区维护,形成了现在的 react-transition- group

这个库可以帮助我们方便的实现组件的入场和离场动画,使用时需要进行额外的安装:

# npm

npm install react-transition-group --save

# yarn

yarn add react-transition-group

react-transition-group本身非常小,不会为我们应用程序增加过多的负担

react-transition-group主要包含四个组件:

Transition(了解)

该组件是一个和平台无关的组件(不一定要结合CSS);

在前端开发中,我们一般是结合CSS来完成样式,所以比较常用的是CSSTransition;

CSSTransition

在前端开发中,通常使用CSSTransition来完成过渡动画效果

SwitchTransition

两个组件显示和隐藏切换时,使用该组件

TransitionGroup

将多个动画组件包裹在其中,一般用于列表中元素的动画;


CSSTransition(掌握)

CSSTransition是基于Transition组件构建的:

CSSTransition执行过程中,有三个状态:appear、enter、exit;

每个状态又有三种状态,需要定义对应的CSS样式:

第一类, 开始状态: 对应的类是-appear、-enter、-exit;

第二类, 执行动画: 对应的类是-appear-active、-enter-active、-exit-active;

第三类, 执行结束: 对应的类是-appear-done、-enter-done、-exit-done;

**CSSTransition常见对应的属性: **

in:触发进入或者退出状态

如果添加了unmountOnExit={true},那么该组件会在执行退出动画结束后被移除掉;

当in为true时,触发进入状态,会添加-enter、-enter-acitve的class开始执行动画,当动画执行结束后,会移除两个class, 并且添加-enter-done的class;

当in为false时,触发退出状态,会添加-exit、-exit-active的class开始执行动画,当动画执行结束后,会移除两个class,并 且添加-enter-done的class;

classNames:动画class的名称

决定了在编写css时,对应的class名称

比如card-enter、card-enter-active、card-enter-done;

timeout:

过渡动画的时间, 最好和css中的时间保持一致

appea:

是否在初次进入添加动画(需要和in同时为true)

unmountOnExit:退出后卸载组件

其他属性可以参考官网来学习:https://reactcommunity.org/react-transition-group/transition

export class App extends PureComponent {constructor() {super()this.state = {isShow: false}}render() {const { isShow } = this.statereturn (<div><button onClick={() => this.setState({ isShow: !isShow })}>切换</button>{/* timeout和unmountOnExit是必须要加的 */}<CSSTransition timeout={2000} unmountOnExit={true} in={isShow} classNames="abc"><h2>哈哈哈</h2></CSSTransition></div>)}
}
/* 要进入的状态 */
.abc-enter {opacity: 0;
}/* 进入过程的状态 */
.abc-enter-active {opacity: 1;transition: opacity 2s ease;
}/* 要离开的状态 */
.abc-exit {opacity: 1;
}/* 离开过程的状态 */
.abc-exit-active {opacity: 0;transition: opacity 2s ease;
}

CSSTransition对应的钩子函数:主要为了检测动画的执行过程,来完成一些JavaScript的操作

onEnter:在进入动画之前被触发;

onEntering:在应用进入动画时被触发;

onEntered:在应用进入动画执行结束后被触发;

onExit: 在离开动画之前触发;

onExiting: 在应用离开动画时被触发

onExited: 在应用离开动画执行结束后被触发

<CSSTransition timeout={2000} unmountOnExit={true}in={isShow} classNames="abc"onEnter={() => console.log("准备开始执行进入动画")}onEntering={() => console.log("执行进入动画")}onEntered={() => console.log("进入动画执行结束")}onExit={() => console.log("准备开始执行离开动画")}onExiting={() => console.log("执行离开动画")}onExited={() => console.log("离开动画执行结束")}
><h2>哈哈哈</h2>
</CSSTransition>

SwitchTransition(了解)

SwitchTransition可以完成两个组件之间切换的炫酷动画:

比如我们有一个按钮需要在on和off之间切换,我们希望看到on先从左侧退出,off再从右侧进入;

这个动画在vue中被称之为 vue transition modes;

react-transition-group中使用SwitchTransition来实现该动画;

SwitchTransition中主要有一个属性:mode,有两个值

in-out:表示新组件先进入,旧组件再移除;

out-in:表示旧组件先移除,新组件再进入;

如何使用SwitchTransition呢?

SwitchTransition组件里面要有CSSTransition或者Transition组件,不能直接包裹你想要切换的组件;

SwitchTransition里面的CSSTransition或Transition组件不再像以前那样接受in属性来判断元素是何种状态,取而代之的是 key属性;

export class App extends PureComponent {constructor() {super()this.state = {isOn: true}}render() {const { isOn } = this.statereturn (<div><SwitchTransition mode='out-in'><CSSTransition timeout={1000} unmountOnExit={true} key={isOn ? "ON" : "OFF"}classNames="handoff"><button onClick={() => this.setState({ isOn: !isOn })}>{isOn ? "ON" : "OFF"}</button></CSSTransition></SwitchTransition></div>)}
}
.handoff-enter {transform: translateX(100px);opacity: 0;
}.handoff-enter-active {transform: translateX(0);opacity: 1;transition: all 1s linear;
}.handoff-exit {transform: translateX(0);opacity: 1;
}.handoff-exit-active {transform: translateX(-100px);opacity: 0;transition: all 1s linear;
}

TransitionGroup(了解)

当我们有一组动画时,需要将这些CSSTransition放入到一个TransitionGroup中来完成动画:

export class App extends PureComponent {constructor() {super()this.state = {students: [{name: "aaa", age: 18},{name: "bbb", age: 19},{name: "ccc", age: 20},{name: "ddd", age: 21}]}}changeStudent(add = true, index) {const students = [...this.state.students]if(add) {students.push({name: new Date().getTime(), age: 22})} else {students.splice(index, 1)}this.setState({ students })}render() {const { students } = this.statereturn (<div><h3>学生信息</h3>{/* component控制渲染成什么元素, 默认为div */}<TransitionGroup component="ul">{students.map((item, index) => {return (<CSSTransition key={item.name} classNames="stu" timeout={1000}><li><span>姓名: {item.name} - 年龄: {item.age}</span><button onClick={() => this.changeStudent(false, index)}>删除</button></li></CSSTransition>)})}</TransitionGroup><button onClick={() => this.changeStudent()}>添加学生信息</button></div>)}
}
.stu-enter {transform: translateX(100px);opacity: 0;
}.stu-enter-active {transform: translateX(0);opacity: 1;transition: all 1s ease;
}.stu-exit {transform: translateX(0);opacity: 1;
}.stu-exit-active {transform: translateX(100px);opacity: 0;transition: all 1s ease;
}

React中过渡动画的编写方式相关推荐

  1. vue中过渡动画(类名实现方式)

    vue中过渡动画分为两类,一类是进场动画,一类是出场动画 要实现上面的进场动画,主要有三种方式:类名,css动画库,js函数 类名 本质就是动态添加类名实现动画 在进入/离开的过渡中,会有 6 个 c ...

  2. [vue] vue过渡动画实现的方式有哪些?

    [vue] vue过渡动画实现的方式有哪些? 1.使用vue的transition标签结合css样式完成动画 2.利用animate.css结合transition实现动画 3.利用 vue中的钩子函 ...

  3. React中组件间通信的方式

    React中组件间通信的方式 React中组件间通信包括父子组件.兄弟组件.隔代组件.非嵌套组件之间通信. Props props适用于父子组件的通信,props以单向数据流的形式可以很好的完成父子组 ...

  4. React-Router4 嵌套路由实现的两种方式以及路由过渡动画的实现方式

    刚学习react的路由 一个小的后台管理demo 目录结构 // 后台管理页面通常有两种布局方式 // 一种是没有导航栏的 登录页面 // 一种是含有导航栏的 各功能性页面 // 导航栏不需要每次都渲 ...

  5. react中使用动画 react-transition-group

    在React中通过react-transition-group使用过渡.动画,首先要有CSS3中的过渡和动画的相关知识储备,可以参考 过渡和2D变换.动画和3d变换. 我们自己通过css设置过渡.动画 ...

  6. react 交互_如何在React中建立动画微交互

    react 交互 Microinteractions guide a user through your application. They reinforce your user experienc ...

  7. react中key的正确使用方式

    在开发react程序时我们经常会遇到这样的警告,然后就会想到:哦!循环子组件忘记加key了- 出于方便,有时候会不假思索的使用循环的索引作为key,但是这样真的好吗?什么样的值才是key的最佳选择? ...

  8. Javaweb中web.xml配置文件编写方式

    在建好项目和类过后如果需要访问浏览器需要配置web.xml文件,向浏览器提供一个访问入口 具体配置方法: 1.在<web-app>标签下编写配置文件 <web-app> < ...

  9. React | React的过渡动画

    ✨ 个人主页:CoderHing

最新文章

  1. IDEA中git的使用和分支的创建
  2. 51单片机模块化编程初识
  3. js 字符串删除首尾_JavaScript trim 实现去除字符串首尾指定字符的简单方法
  4. 【编程思想】什么是微服务
  5. java画虚线_在java中绘制虚线
  6. 苹果iPhone XI奋起直追?直接升级四摄镜头
  7. 使用java进行图像处理_使用Java进行图像处理
  8. Bailian4003 十六进制转十进制【入门】
  9. SRM 515 DIV1 550pt
  10. PHP学习之函数中的全局参数
  11. 前端_day04_行,块,RGB,行高,overflow
  12. 值得收藏,分享3个的 Python 实战项目
  13. 直流电机正反转驱动电路
  14. C++结构型模式-适配器模式
  15. Avatar Scaler
  16. mysql中db的名词解释_数据库常用名词解释大全
  17. chrome android远程调试工作原理
  18. nmap扫描渗透测试1
  19. 【ParaView教程】第四章 常见问题 —— 怎样计算正面投影面积?
  20. ADO Execute 方法 (ADO Connection)

热门文章

  1. springboot+Rabit实战三:(springboot+rabbit 项目搭建)
  2. Android 11 Audio框架探索之AudioTracK(二)
  3. 【BZOJ4316】小C的独立集
  4. web前端新手入门:中国互联网的发展史
  5. origin画图修改横坐标
  6. 数贝携手付晓岩老师带你玩转“企业架构”
  7. 联发科mtk手机处理器怎么样_联发科发布G25和G35手机处理器,定位入门市场
  8. 卸载红蜘蛛多媒体网络教室
  9. python 删除pdf页面_删除PDF其中几页的方法
  10. SAPI ++微信SaaS平台源码v1.8.7.1