iportal
Version:
web-portal
93 lines (85 loc) • 3.29 kB
text/typescript
import effectTypes from './preset'
import { Application } from '../../Application'
import { TransformHistory } from '../history'
import { TransformAnimateEvent } from '../../types'
class TransformAnimation extends TransformHistory {
public animation: boolean | Array<(e: TransformAnimateEvent) => void> = false
constructor (app: Application) {
super(app)
}
public getAnimationGroup (): [(e: TransformAnimateEvent) => void | Promise<boolean>, (e: TransformAnimateEvent) => void | Promise<boolean>] | boolean {
if (!this.modulu || this.modulu.rel !== 'module') return false
let animationFunction: [(e: TransformAnimateEvent) => void, (e: TransformAnimateEvent) => void] | undefined
let animationNames = this[this.history !== 1 && this.historyDirection === -1 ? 'modulu' : 'module'].config.animation
if (animationNames === true || animationNames === 'inherit') {
animationNames = this.options.defaultAnimation
}
if (typeof animationNames === 'string') {
animationFunction = this.getAnimationByName(animationNames)
} else if (typeof animationNames?.[0] !== 'function') {
return animationNames as [(e: TransformAnimateEvent) => void | Promise<boolean>, (e: TransformAnimateEvent) => void | Promise<boolean>]
}
if (typeof animationFunction?.[0] !== 'function') {
return false
}
return animationFunction
}
public getAnimationOneSide (backset: number): ((e: TransformAnimateEvent) => void | Promise<boolean>) | undefined {
const animationGroup = this.animation
if (backset >= 0) {
switch (typeof animationGroup) {
case 'function':
return animationGroup
case 'object':
return animationGroup[animationGroup.length === 2 ? backset : 0]
default:
return
}
}
return
}
public getAnimationByName (type: string): [(e: TransformAnimateEvent) => void | Promise<boolean>, (e: TransformAnimateEvent) => void | Promise<boolean>] | undefined {
switch (type) {
case 'flip':
return [effectTypes.flip(4), effectTypes.flip(4)]
case 'flipLeft':
case 'flip-left':
return [effectTypes.flip(3), effectTypes.flip(3)]
case 'flipDown':
case 'flip-down':
return [effectTypes.flip(2), effectTypes.flip(2)]
case 'flipRight':
case 'flip-right':
return [effectTypes.flip(1), effectTypes.flip(1)]
case 'flipUp':
case 'flip-up':
return [effectTypes.flip(0), effectTypes.flip(0)]
case 'fade':
return [effectTypes.fade(1), effectTypes.fade(0)]
case 'zoom':
return [effectTypes.zoom(1), effectTypes.zoom(0)]
case 'slide':
case 'slideLeft':
case 'slideleft':
case 'slide-left':
return [effectTypes.slide(1), effectTypes.slide(3)]
case 'slideRight':
case 'slideright':
case 'slide-right':
return [effectTypes.slide(3), effectTypes.slide(1)]
case 'slideUp':
case 'slideup':
case 'slide-up':
return [effectTypes.slide(2), effectTypes.slide(0)]
case 'slideDown':
case 'slidedown':
case 'slide-down':
return [effectTypes.slide(0), effectTypes.slide(2)]
default:
return
}
}
}
export {
TransformAnimation
}