mirror of
https://github.com/antebudimir/feishin.git
synced 2025-12-31 10:03:33 +00:00
add animation presets
This commit is contained in:
parent
1faef6a1a7
commit
786a693526
2 changed files with 414 additions and 0 deletions
298
src/shared/components/animations/animation-props.ts
Normal file
298
src/shared/components/animations/animation-props.ts
Normal file
|
|
@ -0,0 +1,298 @@
|
|||
import type { MotionProps } from 'motion/react';
|
||||
|
||||
const fadeIn: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { opacity: 0 },
|
||||
show: { opacity: 1 },
|
||||
},
|
||||
};
|
||||
|
||||
const fadeOut: MotionProps = {
|
||||
animate: 'hidden',
|
||||
exit: 'show',
|
||||
initial: 'show',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { opacity: 0 },
|
||||
show: { opacity: 1 },
|
||||
},
|
||||
};
|
||||
|
||||
const slideInLeft: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'initial',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { x: -100 },
|
||||
initial: { x: -100 },
|
||||
show: { x: 0 },
|
||||
},
|
||||
};
|
||||
|
||||
const slideOutLeft: MotionProps = {
|
||||
animate: 'hidden',
|
||||
exit: 'show',
|
||||
initial: 'initial',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { x: -100 },
|
||||
initial: { x: 0 },
|
||||
show: { x: 0 },
|
||||
},
|
||||
};
|
||||
|
||||
const slideInRight: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'initial',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { x: 100 },
|
||||
initial: { x: 100 },
|
||||
show: { x: 0 },
|
||||
},
|
||||
};
|
||||
|
||||
const slideOutRight: MotionProps = {
|
||||
animate: 'hidden',
|
||||
exit: 'show',
|
||||
initial: 'show',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { x: 100 },
|
||||
initial: { x: 0 },
|
||||
show: { x: 0 },
|
||||
},
|
||||
};
|
||||
|
||||
const slideInUp: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { y: 100 },
|
||||
show: { y: 0 },
|
||||
},
|
||||
};
|
||||
|
||||
const slideOutUp: MotionProps = {
|
||||
animate: 'hidden',
|
||||
exit: 'show',
|
||||
initial: 'initial',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { y: 100 },
|
||||
initial: { y: 0 },
|
||||
show: { y: 0 },
|
||||
},
|
||||
};
|
||||
|
||||
const slideInDown: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'initial',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { y: -100 },
|
||||
initial: { y: -100 },
|
||||
show: { y: 0 },
|
||||
},
|
||||
};
|
||||
|
||||
const slideOutDown: MotionProps = {
|
||||
animate: 'hidden',
|
||||
exit: 'show',
|
||||
initial: 'show',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { y: -10 },
|
||||
show: { y: 0 },
|
||||
},
|
||||
};
|
||||
|
||||
const scale: MotionProps = {
|
||||
animate: { scale: 1 },
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { scale: 0 },
|
||||
show: { scale: 1 },
|
||||
},
|
||||
};
|
||||
|
||||
const rotate: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { rotate: 0 },
|
||||
show: { rotate: 360 },
|
||||
},
|
||||
};
|
||||
|
||||
const bounce: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 0.3, times: [0, 0.5, 1] },
|
||||
variants: {
|
||||
hidden: { y: [0, -30, 0] },
|
||||
show: { y: 0 },
|
||||
},
|
||||
};
|
||||
|
||||
const pulse: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 1, repeat: Infinity },
|
||||
variants: {
|
||||
hidden: { scale: [1, 1.1, 1] },
|
||||
show: { scale: 1 },
|
||||
},
|
||||
};
|
||||
|
||||
const shake: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { x: [-10, 10, -10, 10, 0] },
|
||||
show: { x: 0 },
|
||||
},
|
||||
};
|
||||
|
||||
const flip: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { rotateY: 0 },
|
||||
show: { rotateY: 360 },
|
||||
},
|
||||
};
|
||||
|
||||
const zoomIn: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { opacity: 0, scale: 0.5 },
|
||||
show: { opacity: 1, scale: 1 },
|
||||
},
|
||||
};
|
||||
|
||||
const zoomOut: MotionProps = {
|
||||
animate: { opacity: 0, scale: 0.5 },
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { opacity: 0, scale: 0.5 },
|
||||
show: { opacity: 1, scale: 1 },
|
||||
},
|
||||
};
|
||||
|
||||
const rotateIn: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { opacity: 0, rotate: -180 },
|
||||
show: { opacity: 1, rotate: 0 },
|
||||
},
|
||||
};
|
||||
|
||||
const swing: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 1, repeat: Infinity },
|
||||
variants: {
|
||||
hidden: { rotate: [0, 15, -15, 0] },
|
||||
show: { rotate: 0 },
|
||||
},
|
||||
};
|
||||
|
||||
const rubberBand: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 0.8 },
|
||||
variants: {
|
||||
hidden: { scaleX: [1, 1.25, 0.75, 1.15, 0.95, 1] },
|
||||
show: { scaleX: 1 },
|
||||
},
|
||||
};
|
||||
|
||||
const fadeInUp: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { opacity: 0, y: 50 },
|
||||
show: { opacity: 1, y: 0 },
|
||||
},
|
||||
};
|
||||
|
||||
const fadeInDown: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 0.3 },
|
||||
variants: {
|
||||
hidden: { opacity: 0, y: -50 },
|
||||
show: { opacity: 1, y: 0 },
|
||||
},
|
||||
};
|
||||
|
||||
const rotateScale: MotionProps = {
|
||||
animate: 'show',
|
||||
exit: 'hidden',
|
||||
initial: 'hidden',
|
||||
transition: { duration: 0.7 },
|
||||
variants: {
|
||||
hidden: { rotate: 0, scale: 1 },
|
||||
show: { rotate: 360, scale: 1.5 },
|
||||
},
|
||||
};
|
||||
|
||||
export const animationProps = {
|
||||
bounce,
|
||||
fadeIn,
|
||||
fadeInDown,
|
||||
fadeInUp,
|
||||
fadeOut,
|
||||
flip,
|
||||
pulse,
|
||||
rotate,
|
||||
rotateIn,
|
||||
rotateScale,
|
||||
rubberBand,
|
||||
scale,
|
||||
shake,
|
||||
slideInDown,
|
||||
slideInLeft,
|
||||
slideInRight,
|
||||
slideInUp,
|
||||
slideOutDown,
|
||||
slideOutLeft,
|
||||
slideOutRight,
|
||||
slideOutUp,
|
||||
swing,
|
||||
zoomIn,
|
||||
zoomOut,
|
||||
};
|
||||
116
src/shared/components/animations/animation-variants.ts
Normal file
116
src/shared/components/animations/animation-variants.ts
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
import type { Variants } from 'motion/react';
|
||||
|
||||
import merge from 'lodash/merge';
|
||||
|
||||
const fadeIn: Variants = {
|
||||
hidden: { opacity: 0 },
|
||||
show: { opacity: 1 },
|
||||
};
|
||||
|
||||
const fadeInUp: Variants = {
|
||||
hidden: { opacity: 0, y: 10 },
|
||||
show: { opacity: 1, y: 0 },
|
||||
};
|
||||
|
||||
const fadeInDown: Variants = {
|
||||
hidden: { opacity: 0, y: -10 },
|
||||
show: { opacity: 1, y: 0 },
|
||||
};
|
||||
|
||||
const fadeInLeft: Variants = {
|
||||
hidden: { opacity: 0, x: 10 },
|
||||
show: { opacity: 1, x: 0 },
|
||||
};
|
||||
|
||||
const fadeInRight: Variants = {
|
||||
hidden: { opacity: 0, x: -10 },
|
||||
show: { opacity: 1, x: 0 },
|
||||
};
|
||||
|
||||
const zoomIn: Variants = {
|
||||
hidden: { scale: 0.5 },
|
||||
show: { scale: 1 },
|
||||
};
|
||||
|
||||
const zoomOut: Variants = {
|
||||
hidden: { scale: 1 },
|
||||
show: { scale: 0.5 },
|
||||
};
|
||||
|
||||
const slideInUp: Variants = {
|
||||
hidden: { y: 10 },
|
||||
show: { y: 0 },
|
||||
};
|
||||
|
||||
const slideInDown: Variants = {
|
||||
hidden: { y: -10 },
|
||||
show: { y: 0 },
|
||||
};
|
||||
|
||||
const slideInLeft: Variants = {
|
||||
hidden: { x: 10 },
|
||||
show: { x: 0 },
|
||||
};
|
||||
|
||||
const slideInRight: Variants = {
|
||||
hidden: { x: 10 },
|
||||
show: { x: 0 },
|
||||
};
|
||||
|
||||
const scaleY: Variants = {
|
||||
hidden: { height: 0, opacity: 0, overflow: 'hidden' },
|
||||
show: { height: 'auto', opacity: 1 },
|
||||
};
|
||||
|
||||
const blurIn: Variants = {
|
||||
hidden: { filter: 'blur(4px)' },
|
||||
show: { filter: 'blur(0px)' },
|
||||
};
|
||||
|
||||
const flipHorizontal: Variants = {
|
||||
hidden: { x: '-100%' },
|
||||
show: { x: 0 },
|
||||
};
|
||||
|
||||
const flipVertical: Variants = {
|
||||
hidden: { y: '-100%' },
|
||||
show: { y: 0 },
|
||||
};
|
||||
|
||||
function combine(...variants: Variants[]) {
|
||||
const merged = merge({}, ...variants);
|
||||
|
||||
return merged as Variants;
|
||||
}
|
||||
|
||||
function stagger(variants: Variants, delay?: number): Variants {
|
||||
return {
|
||||
...variants,
|
||||
show: {
|
||||
...variants.show,
|
||||
transition: {
|
||||
staggerChildren: delay ?? 0.1,
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export const animationVariants = {
|
||||
blurIn,
|
||||
combine,
|
||||
fadeIn,
|
||||
fadeInDown,
|
||||
fadeInLeft,
|
||||
fadeInRight,
|
||||
fadeInUp,
|
||||
flipHorizontal,
|
||||
flipVertical,
|
||||
scaleY,
|
||||
slideInDown,
|
||||
slideInLeft,
|
||||
slideInRight,
|
||||
slideInUp,
|
||||
stagger,
|
||||
zoomIn,
|
||||
zoomOut,
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue