CSS-transition - 图2

1.安装

  1. yarn add react-transition-group

2.使用

这里我使用了unt-design的库,需要安装一下unt-design yarn add antd yarn add @ant-design/icons\

  1. {/* 1.把需要使用动画的组件用csstransition包裹 */}
  2. {/* 2.设置属性 in,这里的in后面对应的是一个布尔值*/}
  3. {/* 3.设置classnames,默认在前面加上前缀 */}
  4. {/* 4.动画退出卸载,卸载dom,不在文档流中占用空间*/}
  5. {/* 5.appear第一次加载有动画,第一步给标签添加appear属性*/}
  1. import React, { PureComponent } from 'react'
  2. import {CSSTransition}from 'react-transition-group'
  3. import { Card, Avatar } from 'antd';
  4. import { EditOutlined, EllipsisOutlined, SettingOutlined } from '@ant-design/icons';
  5. import './index.css'
  6. const { Meta } = Card;
  7. export default class index extends PureComponent {
  8. state={
  9. isShow:true
  10. }
  11. render() {
  12. const {isShow}=this.state
  13. return (
  14. <div >
  15. <button style={{margin:'10px'}} onClick={e=>{this.setState({isShow:!isShow})}}>显示/隐藏</button>
  16. {/* 1.把需要使用动画的组件用csstransition包裹 */}
  17. {/* 2.设置属性 in,这里的in后面对应的是一个布尔值*/}
  18. {/* 3.设置classnames,默认在前面加上前缀 */}
  19. {/* 4.动画退出卸载,卸载dom,不在文档流中占用空间*/}
  20. {/* 5.appear第一次加载有动画,第一步给标签添加appear属性*/}
  21. <CSSTransition in={isShow} classNames='card' timeout={300} unmountOnExit={true} appear
  22. onEnter={el=>console.log('开始进入')}
  23. onEntering={el=>console.log('正在进入')}
  24. onEntered={el=>console.log('进入完成')}
  25. onExit={el=>console.log('开始退出')}
  26. onExiting={el=>console.log('退出状态')}
  27. onExited={el=>console.log('退出完成')}>
  28. <Card
  29. style={{ width: 300 }}
  30. cover={
  31. <img
  32. alt="example"
  33. src="https://gw.alipayobjects.com/zos/rmsportal/JiqGstEfoWAOHiTxclqi.png"
  34. />
  35. }
  36. actions={[
  37. <SettingOutlined key="setting" />,
  38. <EditOutlined key="edit" />,
  39. <EllipsisOutlined key="ellipsis" />,
  40. ]}
  41. >
  42. <Meta
  43. avatar={<Avatar src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" />}
  44. title="Card title"
  45. description="This is the description"
  46. />
  47. </Card>
  48. </CSSTransition>
  49. </div>
  50. )
  51. }
  52. }
  1. //index.css
  2. .card-enter,.card-appear{
  3. opacity: 0;
  4. transform: scale(.6);
  5. }
  6. .card-enter-active,.card-appear-active{
  7. opacity: 1;
  8. transform: scale(1);
  9. transition: all 300ms;
  10. }
  11. .card-enter-done,.card-appear-done{
  12. }
  13. .card-exit {
  14. opacity: 1;
  15. transform: scale(1);
  16. }
  17. .card-exit-active {
  18. opacity: 0;
  19. transform: scale(.6);
  20. transition: all 300ms;
  21. }
  22. .card-exit-done {
  23. opacity: 0;
  24. }