https://blog.csdn.net/scorpio_h/article/details/85205579

添加购物车动画

添加购物车动画要 2个层

  1. 外面的 div层负责 transform: translate3d(56px, 0, 0) 平移
    1. 透明度 opacity从 0 到 1的显示过程
  2. 里面的 icon图标层负责 rotate滚动

image.png

  1. import { CSSTransition } from 'react-transition-group';
  2. <CSSTransition
  3. in={show} // 什么时候添加样式
  4. classNames='cart'
  5. timeout={400} // 动画时长
  6. unmountOnExit // 要销毁,否则层级大于 add按钮
  7. >
  8. <div
  9. className={classnames(styles.decrease)}
  10. onClick={onDecrease}
  11. >
  12. <div className='icon-remove_circle_outline' />
  13. </div>
  14. </CSSTransition>

animate.less

  1. //入场动画
  2. .cart-enter, .cart-exit-done {
  3. opacity: 0;
  4. transform: translate3d(56px, 0, 0);
  5. .icon-remove_circle_outline {
  6. transform: rotate(180deg)
  7. }
  8. }
  9. .cart-enter-active, .cart-exit {
  10. opacity: 1;
  11. transform: translate3d(0, 0, 0);
  12. transition: all 0.4s linear; // 其他 class不需要添加 transition
  13. .icon-remove_circle_outline {
  14. transition: all 0.4s linear;
  15. transform: rotate(0)
  16. }
  17. }
  18. //入场动画执行完成后,这个 class会保留在 div上
  19. .cart-enter-done, .cart-exit {
  20. opacity: 1;
  21. transform: translate3d(0, 0, 0);
  22. .icon-remove_circle_outline {
  23. transform: rotate(0)
  24. }
  25. }
  26. //出场动画,1 出场动画执行的第一个时刻
  27. //.cart-exit {
  28. // opacity: 1;
  29. // transform: translate3d(0, 0, 0);
  30. //}
  31. .cart-exit-active {
  32. opacity: 0;
  33. transform: translate3d(56px, 0, 0);
  34. transition: all 0.4s linear;
  35. .icon-remove_circle_outline {
  36. transform: rotate(180deg);
  37. transition: all 0.4s linear;
  38. }
  39. }
  40. //出场动画执行完成后,这个 class会保留在 div上
  41. //.cart-exit-done {
  42. // opacity: 0;
  43. // transform: translate3d(56px, 0, 0);
  44. //}

CSSTransition

  1. function App() {
  2. const [state, setState] = useState(false)
  3. return (
  4. <CSSTransition
  5. in={state}
  6. timeout={1000}
  7. classNames="fade"
  8. appear
  9. unmountOnExit
  10. onEntered={el => {el.style.color="red"}}
  11. >
  12. <div>item</div>
  13. </CSSTransition>
  14. )
  15. }

入场类

less

  1. .fade-enter {}
  2. .fade-enter-active {}
  3. .fade-enter-done {}

出场类

  1. .fade-exit {}
  2. .fade-exit-active {}
  3. .fade-exit-done {}