mirror of
https://gitee.com/ant-design/ant-design.git
synced 2024-12-15 17:31:25 +08:00
164 lines
3.4 KiB
TypeScript
164 lines
3.4 KiB
TypeScript
|
import type { CSSInterpolation } from '@ant-design/cssinjs';
|
||
|
import { Keyframes } from '@ant-design/cssinjs';
|
||
|
import type { AliasToken } from '../../_util/theme';
|
||
|
import type { TokenWithCommonCls } from '../../_util/theme/util/genComponentStyleHook';
|
||
|
import { initMotion } from './motion';
|
||
|
|
||
|
export const moveDownIn = new Keyframes('antMoveDownIn', {
|
||
|
'0%': {
|
||
|
transform: 'translateY(100%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 0,
|
||
|
},
|
||
|
|
||
|
'100%': {
|
||
|
transform: 'translateY(0%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 1,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
export const moveDownOut = new Keyframes('antMoveDownOut', {
|
||
|
'0%': {
|
||
|
transform: 'translateY(0%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 1,
|
||
|
},
|
||
|
|
||
|
'100%': {
|
||
|
transform: 'translateY(100%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 0,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
export const moveLeftIn = new Keyframes('antMoveLeftIn', {
|
||
|
'0%': {
|
||
|
transform: 'translateX(-100%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 0,
|
||
|
},
|
||
|
|
||
|
'100%': {
|
||
|
transform: 'translateX(0%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 1,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
export const moveLeftOut = new Keyframes('antMoveLeftOut', {
|
||
|
'0%': {
|
||
|
transform: 'translateX(0%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 1,
|
||
|
},
|
||
|
|
||
|
'100%': {
|
||
|
transform: 'translateX(-100%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 0,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
export const moveRightIn = new Keyframes('antMoveRightIn', {
|
||
|
'0%': {
|
||
|
transform: 'translateX(100%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 0,
|
||
|
},
|
||
|
|
||
|
'100%': {
|
||
|
transform: 'translateX(0%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 1,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
export const moveRightOut = new Keyframes('antMoveRightOut', {
|
||
|
'0%': {
|
||
|
transform: 'translateX(0%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 1,
|
||
|
},
|
||
|
|
||
|
'100%': {
|
||
|
transform: 'translateX(100%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 0,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
export const moveUpIn = new Keyframes('antMoveUpIn', {
|
||
|
'0%': {
|
||
|
transform: 'translateY(-100%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 0,
|
||
|
},
|
||
|
|
||
|
'100%': {
|
||
|
transform: 'translateY(0%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 1,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
export const moveUpOut = new Keyframes('antMoveUpOut', {
|
||
|
'0%': {
|
||
|
transform: 'translateY(0%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 1,
|
||
|
},
|
||
|
|
||
|
'100%': {
|
||
|
transform: 'translateY(-100%)',
|
||
|
transformOrigin: '0 0',
|
||
|
opacity: 0,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
type MoveMotionTypes = 'move-up' | 'move-down' | 'move-left' | 'move-right';
|
||
|
const moveMotion: Record<MoveMotionTypes, { inKeyframes: Keyframes; outKeyframes: Keyframes }> = {
|
||
|
'move-up': {
|
||
|
inKeyframes: moveUpIn,
|
||
|
outKeyframes: moveUpOut,
|
||
|
},
|
||
|
'move-down': {
|
||
|
inKeyframes: moveDownIn,
|
||
|
outKeyframes: moveDownOut,
|
||
|
},
|
||
|
'move-left': {
|
||
|
inKeyframes: moveLeftIn,
|
||
|
outKeyframes: moveLeftOut,
|
||
|
},
|
||
|
'move-right': {
|
||
|
inKeyframes: moveRightIn,
|
||
|
outKeyframes: moveRightOut,
|
||
|
},
|
||
|
};
|
||
|
|
||
|
export const initMoveMotion = (
|
||
|
token: TokenWithCommonCls<AliasToken>,
|
||
|
motionName: MoveMotionTypes,
|
||
|
): CSSInterpolation => {
|
||
|
const { antCls } = token;
|
||
|
const motionCls = `${antCls}-${motionName}`;
|
||
|
const { inKeyframes, outKeyframes } = moveMotion[motionName];
|
||
|
|
||
|
return [
|
||
|
initMotion(motionCls, inKeyframes, outKeyframes, token.motionDurationMid),
|
||
|
{
|
||
|
[`
|
||
|
${motionCls}-enter,
|
||
|
${motionCls}-appear
|
||
|
`]: {
|
||
|
opacity: 0,
|
||
|
animationTimingFunction: token.motionEaseOutCirc,
|
||
|
},
|
||
|
|
||
|
[`${motionCls}-leave`]: {
|
||
|
animationTimingFunction: token.motionEaseInOutCirc,
|
||
|
},
|
||
|
},
|
||
|
];
|
||
|
};
|