transition.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import _extends from "@babel/runtime/helpers/esm/extends";
  2. import { nextTick, Transition, TransitionGroup } from 'vue';
  3. import { tuple } from './type';
  4. const SelectPlacements = tuple('bottomLeft', 'bottomRight', 'topLeft', 'topRight');
  5. const getTransitionDirection = placement => {
  6. if (placement !== undefined && (placement === 'topLeft' || placement === 'topRight')) {
  7. return `slide-down`;
  8. }
  9. return `slide-up`;
  10. };
  11. export const getTransitionProps = function (transitionName) {
  12. let opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  13. const transitionProps = transitionName ? _extends({
  14. name: transitionName,
  15. appear: true,
  16. // type: 'animation',
  17. // appearFromClass: `${transitionName}-appear ${transitionName}-appear-prepare`,
  18. // appearActiveClass: `antdv-base-transtion`,
  19. // appearToClass: `${transitionName}-appear ${transitionName}-appear-active`,
  20. enterFromClass: `${transitionName}-enter ${transitionName}-enter-prepare ${transitionName}-enter-start`,
  21. enterActiveClass: `${transitionName}-enter ${transitionName}-enter-prepare`,
  22. enterToClass: `${transitionName}-enter ${transitionName}-enter-active`,
  23. leaveFromClass: ` ${transitionName}-leave`,
  24. leaveActiveClass: `${transitionName}-leave ${transitionName}-leave-active`,
  25. leaveToClass: `${transitionName}-leave ${transitionName}-leave-active`
  26. }, opt) : _extends({
  27. css: false
  28. }, opt);
  29. return transitionProps;
  30. };
  31. export const getTransitionGroupProps = function (transitionName) {
  32. let opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  33. const transitionProps = transitionName ? _extends({
  34. name: transitionName,
  35. appear: true,
  36. // appearFromClass: `${transitionName}-appear ${transitionName}-appear-prepare`,
  37. appearActiveClass: `${transitionName}`,
  38. appearToClass: `${transitionName}-appear ${transitionName}-appear-active`,
  39. enterFromClass: `${transitionName}-appear ${transitionName}-enter ${transitionName}-appear-prepare ${transitionName}-enter-prepare`,
  40. enterActiveClass: `${transitionName}`,
  41. enterToClass: `${transitionName}-enter ${transitionName}-appear ${transitionName}-appear-active ${transitionName}-enter-active`,
  42. leaveActiveClass: `${transitionName} ${transitionName}-leave`,
  43. leaveToClass: `${transitionName}-leave-active`
  44. }, opt) : _extends({
  45. css: false
  46. }, opt);
  47. return transitionProps;
  48. };
  49. // ================== Collapse Motion ==================
  50. const getCollapsedHeight = () => ({
  51. height: 0,
  52. opacity: 0
  53. });
  54. const getRealHeight = node => ({
  55. height: `${node.scrollHeight}px`,
  56. opacity: 1
  57. });
  58. const getCurrentHeight = node => ({
  59. height: `${node.offsetHeight}px`
  60. });
  61. const collapseMotion = function () {
  62. let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'ant-motion-collapse';
  63. let style = arguments.length > 1 ? arguments[1] : undefined;
  64. let className = arguments.length > 2 ? arguments[2] : undefined;
  65. return {
  66. name,
  67. appear: true,
  68. css: true,
  69. onBeforeEnter: node => {
  70. className.value = name;
  71. style.value = getCollapsedHeight(node);
  72. },
  73. onEnter: node => {
  74. nextTick(() => {
  75. style.value = getRealHeight(node);
  76. });
  77. },
  78. onAfterEnter: () => {
  79. className.value = '';
  80. style.value = {};
  81. },
  82. onBeforeLeave: node => {
  83. className.value = name;
  84. style.value = getCurrentHeight(node);
  85. },
  86. onLeave: node => {
  87. setTimeout(() => {
  88. style.value = getCollapsedHeight(node);
  89. });
  90. },
  91. onAfterLeave: () => {
  92. className.value = '';
  93. style.value = {};
  94. }
  95. };
  96. };
  97. const getTransitionName = (rootPrefixCls, motion, transitionName) => {
  98. if (transitionName !== undefined) {
  99. return transitionName;
  100. }
  101. return `${rootPrefixCls}-${motion}`;
  102. };
  103. export { Transition, TransitionGroup, collapseMotion, getTransitionName, getTransitionDirection };
  104. export default Transition;