mirror of
https://github.com/antd-tiny-vue/antd-tiny-vue.git
synced 2025-09-10 08:13:17 +08:00
feat: add theme and style
This commit is contained in:
163
components/style/motion/slide.ts
Normal file
163
components/style/motion/slide.ts
Normal file
@ -0,0 +1,163 @@
|
||||
import type { CSSInterpolation } from '@antd-tiny-vue/cssinjs'
|
||||
import { Keyframes } from '@antd-tiny-vue/cssinjs'
|
||||
import type { AliasToken } from '../../theme/internal'
|
||||
import type { TokenWithCommonCls } from '../../theme/util/genComponentStyleHook'
|
||||
import { initMotion } from './motion'
|
||||
|
||||
export const slideUpIn = new Keyframes('antSlideUpIn', {
|
||||
'0%': {
|
||||
transform: 'scaleY(0.8)',
|
||||
transformOrigin: '0% 0%',
|
||||
opacity: 0
|
||||
},
|
||||
|
||||
'100%': {
|
||||
transform: 'scaleY(1)',
|
||||
transformOrigin: '0% 0%',
|
||||
opacity: 1
|
||||
}
|
||||
})
|
||||
|
||||
export const slideUpOut = new Keyframes('antSlideUpOut', {
|
||||
'0%': {
|
||||
transform: 'scaleY(1)',
|
||||
transformOrigin: '0% 0%',
|
||||
opacity: 1
|
||||
},
|
||||
|
||||
'100%': {
|
||||
transform: 'scaleY(0.8)',
|
||||
transformOrigin: '0% 0%',
|
||||
opacity: 0
|
||||
}
|
||||
})
|
||||
|
||||
export const slideDownIn = new Keyframes('antSlideDownIn', {
|
||||
'0%': {
|
||||
transform: 'scaleY(0.8)',
|
||||
transformOrigin: '100% 100%',
|
||||
opacity: 0
|
||||
},
|
||||
|
||||
'100%': {
|
||||
transform: 'scaleY(1)',
|
||||
transformOrigin: '100% 100%',
|
||||
opacity: 1
|
||||
}
|
||||
})
|
||||
|
||||
export const slideDownOut = new Keyframes('antSlideDownOut', {
|
||||
'0%': {
|
||||
transform: 'scaleY(1)',
|
||||
transformOrigin: '100% 100%',
|
||||
opacity: 1
|
||||
},
|
||||
|
||||
'100%': {
|
||||
transform: 'scaleY(0.8)',
|
||||
transformOrigin: '100% 100%',
|
||||
opacity: 0
|
||||
}
|
||||
})
|
||||
|
||||
export const slideLeftIn = new Keyframes('antSlideLeftIn', {
|
||||
'0%': {
|
||||
transform: 'scaleX(0.8)',
|
||||
transformOrigin: '0% 0%',
|
||||
opacity: 0
|
||||
},
|
||||
|
||||
'100%': {
|
||||
transform: 'scaleX(1)',
|
||||
transformOrigin: '0% 0%',
|
||||
opacity: 1
|
||||
}
|
||||
})
|
||||
|
||||
export const slideLeftOut = new Keyframes('antSlideLeftOut', {
|
||||
'0%': {
|
||||
transform: 'scaleX(1)',
|
||||
transformOrigin: '0% 0%',
|
||||
opacity: 1
|
||||
},
|
||||
|
||||
'100%': {
|
||||
transform: 'scaleX(0.8)',
|
||||
transformOrigin: '0% 0%',
|
||||
opacity: 0
|
||||
}
|
||||
})
|
||||
|
||||
export const slideRightIn = new Keyframes('antSlideRightIn', {
|
||||
'0%': {
|
||||
transform: 'scaleX(0.8)',
|
||||
transformOrigin: '100% 0%',
|
||||
opacity: 0
|
||||
},
|
||||
|
||||
'100%': {
|
||||
transform: 'scaleX(1)',
|
||||
transformOrigin: '100% 0%',
|
||||
opacity: 1
|
||||
}
|
||||
})
|
||||
|
||||
export const slideRightOut = new Keyframes('antSlideRightOut', {
|
||||
'0%': {
|
||||
transform: 'scaleX(1)',
|
||||
transformOrigin: '100% 0%',
|
||||
opacity: 1
|
||||
},
|
||||
|
||||
'100%': {
|
||||
transform: 'scaleX(0.8)',
|
||||
transformOrigin: '100% 0%',
|
||||
opacity: 0
|
||||
}
|
||||
})
|
||||
|
||||
type SlideMotionTypes = 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right'
|
||||
const slideMotion: Record<SlideMotionTypes, { inKeyframes: Keyframes; outKeyframes: Keyframes }> = {
|
||||
'slide-up': {
|
||||
inKeyframes: slideUpIn,
|
||||
outKeyframes: slideUpOut
|
||||
},
|
||||
'slide-down': {
|
||||
inKeyframes: slideDownIn,
|
||||
outKeyframes: slideDownOut
|
||||
},
|
||||
'slide-left': {
|
||||
inKeyframes: slideLeftIn,
|
||||
outKeyframes: slideLeftOut
|
||||
},
|
||||
'slide-right': {
|
||||
inKeyframes: slideRightIn,
|
||||
outKeyframes: slideRightOut
|
||||
}
|
||||
}
|
||||
|
||||
export const initSlideMotion = (token: TokenWithCommonCls<AliasToken>, motionName: SlideMotionTypes): CSSInterpolation => {
|
||||
const { antCls } = token
|
||||
const motionCls = `${antCls}-${motionName}`
|
||||
const { inKeyframes, outKeyframes } = slideMotion[motionName]
|
||||
|
||||
return [
|
||||
initMotion(motionCls, inKeyframes, outKeyframes, token.motionDurationMid),
|
||||
|
||||
{
|
||||
[`
|
||||
${motionCls}-enter,
|
||||
${motionCls}-appear
|
||||
`]: {
|
||||
transform: 'scale(0)',
|
||||
transformOrigin: '0% 0%',
|
||||
opacity: 0,
|
||||
animationTimingFunction: token.motionEaseOutQuint
|
||||
},
|
||||
|
||||
[`${motionCls}-leave`]: {
|
||||
animationTimingFunction: token.motionEaseInQuint
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
Reference in New Issue
Block a user