keyframes.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import { Keyframes, unit } from '@ant-design/cssinjs';
  2. import { initMotion } from '../../style/motion/motion';
  3. const floatButtonGroupMotion = token => {
  4. const {
  5. componentCls,
  6. floatButtonSize,
  7. motionDurationSlow,
  8. motionEaseInOutCirc,
  9. calc
  10. } = token;
  11. const moveTopIn = new Keyframes('antFloatButtonMoveTopIn', {
  12. '0%': {
  13. transform: `translate3d(0, ${unit(floatButtonSize)}, 0)`,
  14. transformOrigin: '0 0',
  15. opacity: 0
  16. },
  17. '100%': {
  18. transform: 'translate3d(0, 0, 0)',
  19. transformOrigin: '0 0',
  20. opacity: 1
  21. }
  22. });
  23. const moveTopOut = new Keyframes('antFloatButtonMoveTopOut', {
  24. '0%': {
  25. transform: 'translate3d(0, 0, 0)',
  26. transformOrigin: '0 0',
  27. opacity: 1
  28. },
  29. '100%': {
  30. transform: `translate3d(0, ${unit(floatButtonSize)}, 0)`,
  31. transformOrigin: '0 0',
  32. opacity: 0
  33. }
  34. });
  35. const moveRightIn = new Keyframes('antFloatButtonMoveRightIn', {
  36. '0%': {
  37. transform: `translate3d(${unit(calc(floatButtonSize).mul(-1).equal())}, 0, 0)`,
  38. transformOrigin: '0 0',
  39. opacity: 0
  40. },
  41. '100%': {
  42. transform: 'translate3d(0, 0, 0)',
  43. transformOrigin: '0 0',
  44. opacity: 1
  45. }
  46. });
  47. const moveRightOut = new Keyframes('antFloatButtonMoveRightOut', {
  48. '0%': {
  49. transform: 'translate3d(0, 0, 0)',
  50. transformOrigin: '0 0',
  51. opacity: 1
  52. },
  53. '100%': {
  54. transform: `translate3d(${unit(calc(floatButtonSize).mul(-1).equal())}, 0, 0)`,
  55. transformOrigin: '0 0',
  56. opacity: 0
  57. }
  58. });
  59. const moveBottomIn = new Keyframes('antFloatButtonMoveBottomIn', {
  60. '0%': {
  61. transform: `translate3d(0, ${unit(calc(floatButtonSize).mul(-1).equal())}, 0)`,
  62. transformOrigin: '0 0',
  63. opacity: 0
  64. },
  65. '100%': {
  66. transform: 'translate3d(0, 0, 0)',
  67. transformOrigin: '0 0',
  68. opacity: 1
  69. }
  70. });
  71. const moveBottomOut = new Keyframes('antFloatButtonMoveBottomOut', {
  72. '0%': {
  73. transform: 'translate3d(0, 0, 0)',
  74. transformOrigin: '0 0',
  75. opacity: 1
  76. },
  77. '100%': {
  78. transform: `translate3d(0, ${unit(calc(floatButtonSize).mul(-1).equal())}, 0)`,
  79. transformOrigin: '0 0',
  80. opacity: 0
  81. }
  82. });
  83. const moveLeftIn = new Keyframes('antFloatButtonMoveLeftIn', {
  84. '0%': {
  85. transform: `translate3d(${unit(floatButtonSize)}, 0, 0)`,
  86. transformOrigin: '0 0',
  87. opacity: 0
  88. },
  89. '100%': {
  90. transform: 'translate3d(0, 0, 0)',
  91. transformOrigin: '0 0',
  92. opacity: 1
  93. }
  94. });
  95. const moveLeftOut = new Keyframes('antFloatButtonMoveLeftOut', {
  96. '0%': {
  97. transform: 'translate3d(0, 0, 0)',
  98. transformOrigin: '0 0',
  99. opacity: 1
  100. },
  101. '100%': {
  102. transform: `translate3d(${unit(floatButtonSize)}, 0, 0)`,
  103. transformOrigin: '0 0',
  104. opacity: 0
  105. }
  106. });
  107. const groupPrefixCls = `${componentCls}-group`;
  108. return [{
  109. [groupPrefixCls]: {
  110. [`&${groupPrefixCls}-top ${groupPrefixCls}-wrap`]: initMotion(`${groupPrefixCls}-wrap`, moveTopIn, moveTopOut, motionDurationSlow, true),
  111. [`&${groupPrefixCls}-bottom ${groupPrefixCls}-wrap`]: initMotion(`${groupPrefixCls}-wrap`, moveBottomIn, moveBottomOut, motionDurationSlow, true),
  112. [`&${groupPrefixCls}-left ${groupPrefixCls}-wrap`]: initMotion(`${groupPrefixCls}-wrap`, moveLeftIn, moveLeftOut, motionDurationSlow, true),
  113. [`&${groupPrefixCls}-right ${groupPrefixCls}-wrap`]: initMotion(`${groupPrefixCls}-wrap`, moveRightIn, moveRightOut, motionDurationSlow, true)
  114. }
  115. }, {
  116. [`${groupPrefixCls}-wrap`]: {
  117. [`&${groupPrefixCls}-wrap-enter, &${groupPrefixCls}-wrap-appear`]: {
  118. opacity: 0,
  119. animationTimingFunction: motionEaseInOutCirc
  120. },
  121. [`&${groupPrefixCls}-wrap-leave`]: {
  122. opacity: 1,
  123. animationTimingFunction: motionEaseInOutCirc
  124. }
  125. }
  126. }];
  127. };
  128. export default floatButtonGroupMotion;