bounce.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import type { VariantsType } from '../types'
  2. import { varTranEnter, varTranExit } from './transition'
  3. export const varBounce = (props?: VariantsType) => {
  4. const durationIn = props?.durationIn
  5. const durationOut = props?.durationOut
  6. const easeIn = props?.easeIn
  7. const easeOut = props?.easeOut
  8. return {
  9. // IN
  10. in: {
  11. initial: {},
  12. animate: {
  13. scale: [0.3, 1.1, 0.9, 1.03, 0.97, 1],
  14. opacity: [0, 1, 1, 1, 1, 1],
  15. transition: varTranEnter({ durationIn, easeIn })
  16. },
  17. exit: {
  18. scale: [0.9, 1.1, 0.3],
  19. opacity: [1, 1, 0]
  20. }
  21. },
  22. inUp: {
  23. initial: {},
  24. animate: {
  25. y: [720, -24, 12, -4, 0],
  26. scaleY: [4, 0.9, 0.95, 0.985, 1],
  27. opacity: [0, 1, 1, 1, 1],
  28. transition: { ...varTranEnter({ durationIn, easeIn }) }
  29. },
  30. exit: {
  31. y: [12, -24, 720],
  32. scaleY: [0.985, 0.9, 3],
  33. opacity: [1, 1, 0],
  34. transition: varTranExit({ durationOut, easeOut })
  35. }
  36. },
  37. inDown: {
  38. initial: {},
  39. animate: {
  40. y: [-720, 24, -12, 4, 0],
  41. scaleY: [4, 0.9, 0.95, 0.985, 1],
  42. opacity: [0, 1, 1, 1, 1],
  43. transition: varTranEnter({ durationIn, easeIn })
  44. },
  45. exit: {
  46. y: [-12, 24, -720],
  47. scaleY: [0.985, 0.9, 3],
  48. opacity: [1, 1, 0],
  49. transition: varTranExit({ durationOut, easeOut })
  50. }
  51. },
  52. inLeft: {
  53. initial: {},
  54. animate: {
  55. x: [-720, 24, -12, 4, 0],
  56. scaleX: [3, 1, 0.98, 0.995, 1],
  57. opacity: [0, 1, 1, 1, 1],
  58. transition: varTranEnter({ durationIn, easeIn })
  59. },
  60. exit: {
  61. x: [0, 24, -720],
  62. scaleX: [1, 0.9, 2],
  63. opacity: [1, 1, 0],
  64. transition: varTranExit({ durationOut, easeOut })
  65. }
  66. },
  67. inRight: {
  68. initial: {},
  69. animate: {
  70. x: [720, -24, 12, -4, 0],
  71. scaleX: [3, 1, 0.98, 0.995, 1],
  72. opacity: [0, 1, 1, 1, 1],
  73. transition: varTranEnter({ durationIn, easeIn })
  74. },
  75. exit: {
  76. x: [0, -24, 720],
  77. scaleX: [1, 0.9, 2],
  78. opacity: [1, 1, 0],
  79. transition: varTranExit({ durationOut, easeOut })
  80. }
  81. },
  82. // OUT
  83. out: {
  84. animate: { scale: [0.9, 1.1, 0.3], opacity: [1, 1, 0] }
  85. },
  86. outUp: {
  87. animate: {
  88. y: [-12, 24, -720],
  89. scaleY: [0.985, 0.9, 3],
  90. opacity: [1, 1, 0]
  91. }
  92. },
  93. outDown: {
  94. animate: {
  95. y: [12, -24, 720],
  96. scaleY: [0.985, 0.9, 3],
  97. opacity: [1, 1, 0]
  98. }
  99. },
  100. outLeft: {
  101. animate: { x: [0, 24, -720], scaleX: [1, 0.9, 2], opacity: [1, 1, 0] }
  102. },
  103. outRight: {
  104. animate: { x: [0, -24, 720], scaleX: [1, 0.9, 2], opacity: [1, 1, 0] }
  105. }
  106. }
  107. }