React使用官方动画库react-transition-group

npm install react-transition-group --save 安装官方动画库
TransitionEvent
CSSTransition
TransitionGroup
由着三个库组成官网地址

import { CSSTransition,TransitionGroup } from 'react-transition-group';//引入动画库
import './style.css';
class App extends Component {
    constructor(props) {
        super(props);
        this.handleToggle=this.handleToggle.bind(this)
        this.handleAddItem = this.handleAddItem.bind(this)
        this.state = { 
            show:true,
            list:[]
         }
    }
    render() { 
        return ( 
            <Fragment>
                <CSSTransition
                    in={this.state.show}
                    timeout={1000}//动画执行持续时间毫秒
                    classNames='fade'//动画类名
                    unmountOnExit//可选,当动画出场后在页面上移除包裹的dom节点
                    onEntered={(el)=>{//el指的是div内部元素
                        el.style.color='blue'
                    }}
                    appear={true}//第一次展示的时候也要现实动画效果
                >
                    <div>hello</div>
                </CSSTransition>
                {/* 列表里所有的列表都要显示动画效果 */}
                <TransitionGroup>
                    {
                        this.state.list.map((item,index)=>{
                            return(
                                // 在每个具体的动画要加CSSTransition
                                <CSSTransition
                                //当使用TransitionGroup时,就不在需要in这个属性了
                                    timeout={1000}
                                    classNames='fade'//动画类名
                                    unmountOnExit
                                    onEntered={((el)=>{el.style.color='blue'})}
                                    appear={true}
                                    key={index+item}
                                >
                                <div>{item}</div>
                                </CSSTransition>
                            )
                        })
                    }
                </TransitionGroup>
                <button onClick={this.handleToggle}>toggle</button>
                <button onClick={this.handleAddItem}>handleAddItem</button>
            </Fragment>
         );
    }
    handleToggle(){
        let show = this.state.show;
        this.setState({
            show:!show
        })
    }
    handleAddItem(){
        this.setState((prevState)=>{
            return{
                list:[...prevState.list,'item']
            }
        },()=>{//数据更新完成之后回调函数
            console.log(this.state.list)
        })
    }
}
 
export default App;

style.css

/* 入场之前动画 */
/*.fade-active,.fade-appear.active表示第一次展示也是现实动画效果*/
.fade-enter,.fade-active{
    opacity: 0;
}
/* 入场之前到结束之前的动画 */
.fade-enter-active,.fade-appear.active{
    opacity: 1;
    transition: opacity 2000ms;
}
/* 入场结束的动画 */
.fade-enter-done{
    opacity: 1;
}
/* 出厂动画 */
.fade-exit{
    opacity: 1;
}
.fade-exit-active{
    opacity: 0;
    transition: opacity 2000ms;
}
.fade-exit-done{
    opacity: 0
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值