可以登录https://github.com,在github上搜索react-transition-group 搜索出结果,点击星多的项目 这里有个主文档,点击进入
npm install react-transition-group --save
yarn add react-transition-group Components里有各种案例和说明,喜欢看文档的小伙伴可以看看
js代码
import React,{ Component,Fragment } from 'react'; import './test.css';//引入样式 class Test3 extends Component{ constructor(props){ super(props); this.state={ show:true } this.handleToggle=this.handleToggle.bind(this) } render(){ return( <Fragment> <div className={this.state.show?'show':'hide'}>hello</div> <button onClick={this.handleToggle}>toggle</button> </Fragment> ) } handleToggle(){ this.setState({ show:this.state.show?false :true }) } } export default Test3;test.css代码
.show{animation: show-item 1s ease-in forwards} .hide{animation: hide-item 1s 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: red; } 50%{ opacity: 0.5; color: green; } 100%{ opacity: 1; color: blue; } }js代码
import React,{ Component,Fragment } from 'react'; import './test.css';//引入样式 import { CSSTransition,TransitionGroup } from 'react-transition-group';//引入react-transition-group模块 class Test3 extends Component{ constructor(props){ super(props); this.state={ list:[], show:true } this.handleToggle=this.handleToggle.bind(this) this.handleAddItem=this.handleAddItem.bind(this) } render(){ return( <Fragment> <CSSTransition in={this.state.show}// 如果this.state.show从false变为true,则动画入场,反之out出场 timeout={1000}//动画时间 classNames='fade'//自定义class名称 unmountOnExit//可选,当动画出场后在页面上移除包裹的dom节点 onEntered={(el)=>{el.style.color='blue'}}//可选,动画入场之后的回调,el指被包裹的dom,让div内的字体颜色等于蓝色 onEnter={(el)=>{el.style.color='red'}}//可选,el指被包裹的dom,动画一开始的样式回调函数 appear={true}//可选,dom节点一开始出现在页面上是否出现动画效果 > <div>hello</div> </CSSTransition> <button onClick={this.handleToggle}>改变hello动画</button> <TransitionGroup> { this.state.list.map((item,index)=>{ return( <CSSTransition key={index} timeout={1000}//动画时间 classNames='fade'//自定义class名称 unmountOnExit//可选,当动画出场后在页面上移除包裹的dom节点 onEntered={(el)=>{el.style.color='blue'}}//可选,动画入场之后的回调,el指被包裹的dom,让div内的字体颜色等于蓝色 onEnter={(el)=>{el.style.color='red'}}//可选,el指被包裹的dom,动画一开始的样式回调函数 appear={true}//可选,dom节点一开始出现在页面上是否出现动画效果 > <div>{item}</div> </CSSTransition> ) }) } </TransitionGroup> <button onClick={this.handleAddItem}>加内容出现动画效果</button> </Fragment> ) } handleToggle(){ this.setState({ show:this.state.show?false :true }) } handleAddItem(){ this.setState((prevState)=>{ return{ list:[...prevState.list,'item'] } }) } } export default Test3;test.css代码
.fade-enter,.fade-appear{opacity: 0;} /* enter是入场前的刹那(点击按钮),appear指页面第一次加载前的一刹那(自动) */ .fade-enter-active,.fade-appear-active{opacity: 1;transition: opacity 1s ease-in} /* enter-active指入场后到入场结束的过程,appear-active则是页面第一次加载自动执行 */ .fade-enter-done,.fade-appear-done{opacity: 1;} /* 入场动画执行完毕后,保持状态 */ .fade-exit{opacity: 1;}/* 出场动画开始 */ .fade-exit-active{opacity: 0;transition: opacity 1s ease-in}/* 出场动画开始到结束的过程 */ .fade-exit-done{opacity: 0;}/* 出场动画执行完毕后,保持状态 */