返回 slidev
transition.ts
根目录 / packages / client / logic / transition.ts
1 import type { SlideRoute } from '@slidev/types'
2 import type { TransitionGroupProps } from 'vue'
3 import { configs } from '../env'
4
5 const transitionResolveMap: Record<string, string | undefined> = {
6 'slide-left': 'slide-left | slide-right',
7 'slide-right': 'slide-right | slide-left',
8 'slide-up': 'slide-up | slide-down',
9 'slide-down': 'slide-down | slide-up',
10 }
11
12 export function resolveTransition(transition?: string | TransitionGroupProps, isBackward = false): TransitionGroupProps | undefined {
13 if (!transition)
14 return undefined
15 if (typeof transition === 'string') {
16 transition = {
17 name: transition,
18 }
19 }
20
21 if (!transition.name)
22 return undefined
23
24 let name = transition.name.includes('|')
25 ? transition.name
26 : (transitionResolveMap[transition.name] || transition.name)
27
28 if (name.includes('|')) {
29 const [forward, backward] = name.split('|').map(i => i.trim())
30 name = isBackward ? backward : forward
31 }
32
33 if (!name)
34 return undefined
35
36 return {
37 ...transition,
38 name,
39 }
40 }
41
42 export function getCurrentTransition(direction: number, currentRoute?: SlideRoute, prevRoute?: SlideRoute) {
43 let transition = direction > 0
44 ? prevRoute?.meta?.transition
45 : currentRoute?.meta?.transition
46 if (!transition)
47 transition = configs.transition || undefined
48
49 return resolveTransition(transition, direction < 0)
50 }
51
51 lines TYPESCRIPT