一. 过渡动画

  # index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './app';
ReactDOM.render(<App />, document.getElementById('root'));

  # app.js

import React, { Component, Fragment } from 'react';
import './style.css';
class app extends Component{
constructor(props){
super(props);
this.state = {
show : true
};
this.DivToggle = this.DivToggle.bind(this);
}
DivToggle(){
console.log(this.state.show)
this.setState({
show: this.state.show ? false : true
})
}
render() {
return (
<Fragment>
<div className={this.state.show? 'show': 'hide'}>你好啊</div>
<button onClick={this.DivToggle}>toggle</button>
</Fragment>
)
}
}
export default app;

  # style.css

.show{
opacity: 1;
transition: all 1s ease-in;
}
.hide{
opacity: 0;
transition: all 1s ease-in;
}

二.动画效果

  使用 keyframes 进行渲染 动画

# style.css

.show{
/* 使用 forwards css 动画最后一帧 保存 样式*/
animation: show-item 2s ease-in forwards;
}
.hide{
/* 使用 forwards css 动画最后一帧 保存 样式*/
animation: hide-item 2s ease-in forwards;
} @keyframes hide-item {
0% {
opacity: 1;
color: red;
}
50% {
opacity: 0.5;
color: green;
}
100% {
opacity: 0;
color: blue;
}
} @keyframes show-item {
0% {
opacity: 0;
color: blue;
}
50% {
opacity: 0.5;
color: green;
}
100% {
opacity: 1;
color: red;
}
}

三. 使用 react-transition-group CSSTransition 实现动画  (github 地址)  (文档)

  1. 安装 react-transition-group

    yarn add react-transition-group

  2. 引入 css-transition

    import { CSSTransition } fron 'react-transition-group'

  3. 将要 改变样式的元素用 CSSTransition 标签包裹起来

  eg:

    # index.js

import React from 'react';

import ReactDOM from 'react-dom';

import App from './app';

ReactDOM.render(<App />, document.getElementById('root'));

    # app.js

import React, {Component, Fragment} from 'react';

import {CSSTransition} from 'react-transition-group'

import './style.css'

class app extends Component

{

constructor(props){

super(props);

this.state={

show : true

}

this.DivToggle = this.DivToggle.bind(this);

}

DivToggle(){

console.log(this.state.show);

this.setState({

show: this.state.show? false : true

});

}

render(){

return (

<Fragment>

<CSSTransition

in={this.state.show}

timeout={1000}

classNames = "fade"

// 当隐藏后 去除挂载

unmountOnExit

// 当显示完成时 颜色变蓝  el 指 CSSTransition 内包裹的元素

onEntered={(el)=>{ el.style.color='red' }}

// 当退出显示时 颜色变黑  el 指 CSSTransition 内包裹的元素

onExited={(el)=>{ el.style.color='black' }}

// 第一次入场动画也要引入动画

appear={true}

>

<div className={this.state.show?'show':'hide'}>hello</div>

</CSSTransition>

<button type="button" onClick={this.DivToggle}>点一下</button>

</Fragment>

);

}

}

export default app;

    #style.css

/* 第一次加载的时候 */
.fade-appear{
opacity: 0;
}
/* 第一次入场的时候后到 第一次完成之前 */
.fade-appear-active{
opacity: 1;
transition: opacity 1s ease-in;
}
/* 入场动画执行的第一个时刻 */
.fade-enter{
opacity: 0;
}
/* 入场动画执行的第二个时刻 到 完成之前 */
.fade-enter-active{
opacity: 1;
transition: opacity 1s ease-in;
}
/* 入场动画执行的完成时刻 */
.fade-enter-done{
opacity: 1;
}
/* 出场动画开始第一个时刻 */
.fade-exit{
opacity: 1;
}
/* 出场动画开始第二个时刻到完成时刻之前 */
.fade-exit-active{
opacity: 0;
transition: opacity 1s ease-in;
}
/* 出场动画的完成时刻 */
.fade-exit-done{
opacity: 0;
}

四. 使用react-transition-group CSSTransition TransitionGroup 实现多个元素样式动画

#index.js

import React from 'react';

import ReactDOM from 'react-dom';

import App from './app';

ReactDOM.render(<App />, document.getElementById('root'));

#app.js

import React, {Component, Fragment} from 'react';

import {CSSTransition, TransitionGroup} from 'react-transition-group'

import './style.css'

class app extends Component

{

constructor(props){

super(props);

this.state={

list : []

}

this.AddItem = this.AddItem.bind(this);

}

AddItem (){

this.setState((prevState)=>{

return {

list : [...prevState.list, 'item']

}

})

}

render(){

return (

<Fragment>

{/* TransitionGroup 包裹住要展示动画的元素 */}

<TransitionGroup>

{

this.state.list.map((val, index)=>{

return (

// 内部要展示样式的元素 使用 CSSTransition 包裹并边写动画效果

// 这时可以删除 in 效果 没有手动点击变换效果

<CSSTransition

timeout={1000}

classNames="fade"

onEntered={(el)=>{el.style.color="red"}}

appear={true}

key={index}

>

<div key={index} >{val}</div>

</CSSTransition>

)

})

}

</TransitionGroup>

<button type="button" onClick={this.AddItem}>点一下</button>

</Fragment>

);

}

}

export default app;

#style.css

/* 第一次加载的时候 */
.fade-appear{
opacity: 0;
}
/* 第一次入场的时候后到 第一次完成之前 */
.fade-appear-active{
opacity: 1;
transition: opacity 1s ease-in;
}
/* 入场动画执行的第一个时刻 */
.fade-enter{
opacity: 0;
}
/* 入场动画执行的第二个时刻 到 完成之前 */
.fade-enter-active{
opacity: 1;
transition: opacity 1s ease-in;
}
/* 入场动画执行的完成时刻 */
.fade-enter-done{
opacity: 1;
}
/* 出场动画开始第一个时刻 */
.fade-exit{
opacity: 1;
}
/* 出场动画开始第二个时刻到完成时刻之前 */
.fade-exit-active{
opacity: 0;
transition: opacity 1s ease-in;
}
/* 出场动画的完成时刻 */
.fade-exit-done{
opacity: 0;
}

12 react 基础 的 css 过渡动画 及 动画效果 及 使用 react-transition-group 实现动画的更多相关文章

  1. Unity3D中暂停时的动画及粒子效果实现

    暂停是游戏中经常出现的功能,而Unity3D中对于暂停的处理并不是很理想.一般的做法是将Time.timeScale设置为0.Unity的文档中对于这种情况有以下描述: The scale at wh ...

  2. react中使用css动画效果

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

  3. CSS过渡动画之transition

    O(∩_∩)O~ 这两天在看看CSS的相关内容,关于transition动画感觉很有意思,分享一下. CSS负责给html加效果,自然少不了各种动画,今天介绍一下transition. 概述 看一段比 ...

  4. Vue——关于css过渡和动画那些事

    1. 单元素/组件的过渡transition Vue 提供了 transition 的封装组件,在下列情形中,可以给任何元素和组件添加进入/离开过渡 条件渲染 (使用 v-if) 条件展示 (使用 v ...

  5. 36.React基础介绍——2019年12月24日

    2019年12月24日16:47:12 2019年10月25日11:24:29 主要介绍react入门知识. 1.jsx语法介绍 1.1 介绍 jsx语法是一种类似于html标签的语法,它的作用相当于 ...

  6. CSS过渡、CSS动画

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <script s ...

  7. 前端总结·基础篇·CSS(二)视觉

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·CSS(四)兼容 目录 一.动画(animation)(IE ...

  8. 第213天:12个HTML和CSS必须知道的重点难点问题

    12个HTML和CSS必须知道的重点难点问题 这12个问题,基本上就是HTML和CSS基础中的重点个难点了,也是必须要弄清楚的基本问题,其中定位的绝对定位和相对定位到底相对什么定位?这个还是容易被忽视 ...

  9. 前端总结·基础篇·CSS

    前端总结·基础篇·CSS 1 常用重置+重置插件(Normalize.css,IE8+) * {box-sizing:border-box;}  /* IE8+ */body {margin:0;}  ...

随机推荐

  1. 【LeetCode】基本计算器II

    [问题]实现一个基本的计算器来计算一个简单的字符串表达式的值.字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格  .整数除法仅保留整数部分. 输入: "3+2*2" ...

  2. JS写一个旋转木马的视频播放效果

    JS以及JQ的功能很强大,可以做出很多的优秀效果.今天给大家分享一个我之前写网站用到的旋转木马效果. 大概效果图就是这样的,上面的视频播放是旋转木马效果. 下面的音乐播放效果放在下一篇内容里面讲. 直 ...

  3. wx地址和腾讯地图

    如果只是要获取当前用户的经纬度和打开微信自带的地图 只需要 jsApiList: ["getLocation","openLocation"] // 先获得 w ...

  4. Spring的AOP开发(基于AspectJ的XML方式)

    Spring的AOP的简介: AOP思想最早是由AOP联盟组织提出的.Spring是使用这种思想最好的框架 Spring的AOP有自己实现的方式(非常繁琐). Aspect是一个AOP的框架, Spr ...

  5. 学生选课数据库MySQL语句练习题45道

    1. 查询Student表中的所有记录的Sname.Ssex和Class列. select Sname,Ssex,Class from Student;2. 查询教师所有的单位即不重复的Depart列 ...

  6. JavaScript基于原型的继承

    在一个纯粹的原型模式中,我们会摒弃类,转而专注于对象,基于原型的继承相比基于类的继承的概念上更为简单 if( typeof Object.beget !== 'function') { Object. ...

  7. VS2019 添加控制器 主机运行转换时出现问题

    问题: 解决方案: 更换低版本VS,亲测VS2017可行(其它未实测) VS2019目前没找到解决方案,VS版本问题 原文链接

  8. Java 布尔运算

    章节 Java 基础 Java 简介 Java 环境搭建 Java 基本语法 Java 注释 Java 变量 Java 数据类型 Java 字符串 Java 类型转换 Java 运算符 Java 字符 ...

  9. JuJu团队12月4号工作汇报

    JuJu团队12月4号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 于达 调试 无 无 婷婷 和陈灿一起提升acc 无 无 恩升 纠正chunk evaluator 无 无 ...

  10. python --- unittest如何传cookies

    1. #将CookieJar转为字典: cookies = requests.utils.dict_from_cookiejar(r.cookies) #将字典转为CookieJar: cookies ...