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 相关文章推荐
Javascript 刷新全集常用代码
Nov 22 Javascript
基于JQuery的密码强度验证代码
Mar 01 Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
Mar 05 Javascript
ExtJs3.0中Store添加 baseParams 的Bug
Mar 10 Javascript
js 动态修改css文件的方法
Aug 05 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
Aug 04 Javascript
JS实现超简单的汉字转拼音功能示例
Dec 22 Javascript
JS仿Base.js实现的继承示例
Apr 07 Javascript
vue实现验证码按钮倒计时功能
Apr 10 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
Dec 28 Javascript
eslint 的三大通用规则详解
May 16 Javascript
js实现三角形粒子运动
Sep 22 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调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
php 购物车完整实现代码
2014/06/05 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
PHP命令空间namespace及use的用法小结
2017/11/27 PHP
tp5框架使用composer实现日志记录功能示例
2019/01/10 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
javascript不同页面传值的改进版
2008/09/30 Javascript
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
2015/08/13 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
SQL Server数据库笔试题和答案
2016/02/04 面试题
上海雨人软件技术开发有限公司测试题
2015/07/14 面试题
一个大学生十年的职业规划
2014/01/17 职场文书
质量月活动总结
2014/08/26 职场文书
2014年新教师工作总结
2014/11/08 职场文书
2014年宣传工作总结
2014/11/18 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL
mysql sock文件存储了什么信息
2022/07/15 MySQL