react使用CSS实现react动画功能示例


Posted in Javascript onMay 18, 2020

本文实例讲述了react使用CSS实现react动画功能。分享给大家供大家参考,具体如下:

react动画:

import React, { Component } from 'react';
 
class Boss extends Component {
  constructor(props) {
    super(props);
    this.state = {
      isShow:true
    }
    this.toTogger=this.toTogger.bind(this)
  }
  render() { 
    return ( 
      <div>
        <div className={this.state.isShow?'show':'hide'}>大BOSS--孙悟空</div>
        <div><button onClick={this.toTogger}>召唤</button></div>
      </div>
    );
  }
 
  toTogger() {
    this.setState({
      isShow:this.state.isShow?false:true
    })
  }
}
 
export default Boss;

css:

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

keyframes动画:

.hide{animation: hide-item 2s ease-in forwards;}
.show{animation: show-item 2s ease-in forwards;}
 
@keyframes hide-item{
  0%{
    opacity: 0;
    color: red;
  }
 
  50%{
    opacity: 0.5;
    color: saddlebrown;
  }
 
  100%{
    opacity: 1;
    color: yellow;
  }
}
 
@keyframes show-item{
  0%{
    opacity: 1;
    color:green;
  }
 
  50%{
    opacity: 0.5;
    color:greenyellow;
  }
 
  100%{
    opacity: 0;
    color: yellow;
  }
}

react-transition-group动画库:

import {CSSTransition} from 'react-transition-group';  
 
render() { 
    return ( 
      <div>
        <CSSTransition
          in={this.state.isShow}
          timeout={2000}
          classNames="boss-text"
          unmountOnExit
        >
        {/* <div className={this.state.isShow?'show':'hide'}>大BOSS--孙悟空</div> */}
        <div>大BOSS--孙悟空</div>
        </CSSTransition>
    <div><button onClick={this.toTogger}>{this.state.btn}</button></div>
      </div>
    );
  }
.boss-text-enter{opacity: 0;}
.boss-text-enter-active{opacity: 1;transition: opacity 2000ms;}
.boss-text-enter-done{opacity: 1;}
 
.boss-text-exit{opacity: 1;}
.boss-text-exit-active{opacity: 0;transition: opacity 2000ms;}
.boss-text-exit-done{opacity: 0;}

多DOM动画:

import React, { Component, Fragment } from 'react';
import List from './List.js';
import axios from 'axios';
import Boss from './Boss';
import {CSSTransition,TransitionGroup} from 'react-transition-group'
 
class Test extends Component {
  constructor(props) {
    super(props);
    this.state={
      inputValue:'aaa',
      list:[],
    }
    // this.add=this.add.bind(this);
  }
 
  addList() {
    this.setState({
      list:[...this.state.list,this.state.inputValue],
      inputValue:''
    })
  }
 
  change(e) {
    this.setState({
      // inputValue:e.target.value
      inputValue:this.input.value
    })
  }
 
  delete(i) {
    // console.log(i);
    const list = this.state.list;
    list.splice(i,1);
    this.setState({
      list:list
    })
  }
 
  componentDidMount() {
    // console.log('componentDidMount');
    axios.get('https://www.easy-mock.com/mock/5e1d3d1564a3c20d7f366f91/ReactDemo1/App')
    .then((res)=>{
      console.log('获取数据'+JSON.stringify(res));
      this.setState({
        list:res.data.data
      });
    })
    .catch((error)=>{console.log('获取数据失败'+error)});
  }
 
  render() { 
    console.log('3-render');
    return (
      <Fragment>
      <div>
        <input ref={(input)=>{this.input=input}} value={this.state.inputValue} onChange={this.change.bind(this)}/>
        <button onClick={this.addList.bind(this)}>添加</button>
      </div>
      <ul>
        <TransitionGroup>
          {
            this.state.list.map((v,i)=>{
              return(
                <CSSTransition
                  timeout={2000}
                  classNames='boss-text'
                  unmountOnExit
                  key={i}
                >
                  <List key={i} content={v} index={i} delete={this.delete.bind(this)} />
                </CSSTransition>
              );
            })
          }
        </TransitionGroup>
      </ul>
      <Boss/>
      </Fragment>
    );
  }
}
 
export default Test;

希望本文所述对大家react程序设计有所帮助。

Javascript 相关文章推荐
修改js Calendar日历控件 兼容IE9/谷歌/火狐
Jan 04 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
Mar 29 Javascript
JQuery页面的表格数据的增加与分页的实现
Dec 10 Javascript
用JavaScript实现页面重定向功能的教程
Jun 04 Javascript
AngularJs  Using $location详解及示例代码
Sep 02 Javascript
JS公共小方法之判断对象是否为domElement的实例
Nov 25 Javascript
bootstrap Table的一些小操作
Nov 01 Javascript
JavaScript如何对图片进行黑白化
Apr 10 Javascript
详解在React中跨组件分发状态的三种方法
Aug 09 Javascript
原生javascript自定义input[type=radio]效果示例
Aug 27 Javascript
Vue微信公众号网页分享的示例代码
May 28 Javascript
vue将文件/图片批量打包下载zip的教程
Oct 21 Javascript
Node.js API详解之 net模块实例分析
May 18 #Javascript
Javascript实现简易天数计算器
May 18 #Javascript
微信小程序开发打开另一个小程序的实现方法
May 17 #Javascript
微信小程序开发之获取用户手机号码(php接口解密)
May 17 #Javascript
关于AngularJS中几种Providers的区别总结
May 17 #Javascript
VueCli4项目配置反向代理proxy的方法步骤
May 17 #Javascript
JavaScript链式调用原理与实现方法详解
May 16 #Javascript
You might like
无数据库的详细域名查询程序PHP版(4)
2006/10/09 PHP
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
深入HTTP响应状态码速查表的详解
2013/06/07 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
php语言注释,单行注释和多行注释
2018/01/21 PHP
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
javascript设计模式之中介者模式Mediator
2014/12/30 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
JavaScript通过元素索引号删除数组中对应元素的方法
2015/03/18 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
js 作用域和变量详解
2017/02/16 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
Python Mysql自动备份脚本
2008/07/14 Python
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
浅析python的优势和不足之处
2018/11/20 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
Linux的文件类型
2012/03/07 面试题
银行求职信范文
2014/05/26 职场文书
幼儿园个人师德总结
2015/02/06 职场文书
体育个人工作总结
2015/02/09 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
一文搞清楚MySQL count(*)、count(1)、count(col)区别
2022/03/03 MySQL