diff --git a/src/configs/animation.ts b/src/configs/animation.ts index 9019b467..478b6f86 100644 --- a/src/configs/animation.ts +++ b/src/configs/animation.ts @@ -9,6 +9,7 @@ export const ANIMATIONS = [ { name: '向上弹入', value: 'bounceInUp' }, { name: '向下弹入', value: 'bounceInDown' }, ], + hiddenElement: [] }, { type: 'fade', @@ -28,6 +29,7 @@ export const ANIMATIONS = [ { name: '从左下浮入', value: 'fadeInBottomLeft' }, { name: '从右下浮入', value: 'fadeInBottomRight' }, ], + hiddenElement: [] }, { type: 'rotate', @@ -39,6 +41,7 @@ export const ANIMATIONS = [ { name: '绕左上旋转进入', value: 'rotateInUpLeft' }, { name: '绕右上旋转进入', value: 'rotateInUpRight' }, ], + hiddenElement: [] }, { type: 'zoom', @@ -50,6 +53,7 @@ export const ANIMATIONS = [ { name: '从右放大进入', value: 'zoomInRight' }, { name: '向上放大进入', value: 'zoomInUp' }, ], + hiddenElement: [] }, { type: 'slide', @@ -60,6 +64,7 @@ export const ANIMATIONS = [ { name: '从左滑入', value: 'slideInRight' }, { name: '向上滑入', value: 'slideInUp' }, ], + hiddenElement: [] }, { type: 'flip', @@ -68,6 +73,7 @@ export const ANIMATIONS = [ { name: 'X轴翻转进入', value: 'flipInX' }, { name: 'Y轴翻转进入', value: 'flipInY' }, ], + hiddenElement: [] }, { type: 'back', @@ -78,6 +84,7 @@ export const ANIMATIONS = [ { name: '从右放大滑入', value: 'backInRight' }, { name: '向上放大滑入', value: 'backInUp' }, ], + hiddenElement: [] }, { type: 'lightSpeed', @@ -86,5 +93,105 @@ export const ANIMATIONS = [ { name: '从右飞入', value: 'lightSpeedInRight' }, { name: '从左飞入', value: 'lightSpeedInLeft' }, ], + hiddenElement: [] + }, +] + +export const ANIMATIONS_EXITS = [ + { + type: 'bounce', + name: '弹跳', + children: [ + { name: '弹出', value: 'bounceOut' }, + { name: '向左弹出', value: 'bounceOutLeft' }, + { name: '向右弹出', value: 'bounceOutRight' }, + { name: '向上弹出', value: 'bounceOutUp' }, + { name: '向下弹出', value: 'bounceOutDown' }, + ], + hiddenElement: [] + }, + { + type: 'fade', + name: '浮现', + children: [ + { name: '浮出', value: 'fadeOut' }, + { name: '向下浮出', value: 'fadeOutDown' }, + { name: '向下长距浮出', value: 'fadeOutDownBig' }, + { name: '向左浮出', value: 'fadeOutLeft' }, + { name: '向左长距浮出', value: 'fadeOutLeftBig' }, + { name: '向右浮出', value: 'fadeOutRight' }, + { name: '向右长距浮出', value: 'fadeOutRightBig' }, + { name: '向上浮出', value: 'fadeOutUp' }, + { name: '向上长距浮出', value: 'fadeOutUpBig' }, + { name: '从左上浮出', value: 'fadeOutTopLeft' }, + { name: '从右上浮出', value: 'fadeOutTopRight' }, + { name: '从左下浮出', value: 'fadeOutBottomLeft' }, + { name: '从右下浮出', value: 'fadeOutBottomRight' }, + ], + hiddenElement: [] + }, + { + type: 'rotate', + name: '旋转', + children: [ + { name: '旋转退出', value: 'rotateOut' }, + { name: '绕左下旋转退出', value: 'rotateOutDownLeft' }, + { name: '绕右下旋转退出', value: 'rotateOutDownRight' }, + { name: '绕左上旋转退出', value: 'rotateOutUpLeft' }, + { name: '绕右上旋转退出', value: 'rotateOutUpRight' }, + ], + hiddenElement: [] + }, + { + type: 'zoom', + name: '缩放', + children: [ + { name: '缩小退出', value: 'zoomOut' }, + { name: '向下缩小退出', value: 'zoomOutDown' }, + { name: '从左缩小退出', value: 'zoomOutLeft' }, + { name: '从右缩小退出', value: 'zoomOutRight' }, + { name: '向上缩小退出', value: 'zoomOutUp' }, + ], + hiddenElement: [] + }, + { + type: 'slide', + name: '滑出', + children: [ + { name: '向下滑出', value: 'slideOutDown' }, + { name: '从左滑出', value: 'slideOutLeft' }, + { name: '从右滑出', value: 'slideOutRight' }, + { name: '向上滑出', value: 'slideOutUp' }, + ], + hiddenElement: [] + }, + { + type: 'flip', + name: '翻转', + children: [ + { name: 'X轴翻转退出', value: 'flipOutX' }, + { name: 'Y轴翻转退出', value: 'flipOutY' }, + ], + hiddenElement: [] + }, + { + type: 'back', + name: '缩小滑出', + children: [ + { name: '向下缩小滑出', value: 'backOutDown' }, + { name: '从左缩小滑出', value: 'backOutLeft' }, + { name: '从右缩小滑出', value: 'backOutRight' }, + { name: '向上缩小滑出', value: 'backOutUp' }, + ], + hiddenElement: [] + }, + { + type: 'lightSpeed', + name: '飞出', + children: [ + { name: '从右飞出', value: 'lightSpeedOutRight' }, + { name: '从左飞出', value: 'lightSpeedOutLeft' }, + ], + hiddenElement: [] }, ] \ No newline at end of file diff --git a/src/hooks/usePasteTextClipboardData.ts b/src/hooks/usePasteTextClipboardData.ts index e11040ff..4da73394 100644 --- a/src/hooks/usePasteTextClipboardData.ts +++ b/src/hooks/usePasteTextClipboardData.ts @@ -58,8 +58,10 @@ export default () => { element.id = elIdMap[element.id] if (element.groupId) element.groupId = groupIdMap[element.groupId] } + // 动画id替换 if (slide.animations) { for (const animation of slide.animations) { + animation.id = nanoid(10) animation.elId = elIdMap[animation.elId] } } diff --git a/src/main.ts b/src/main.ts index 39ccfe5a..f9efe20d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -33,6 +33,7 @@ import { Drawer, Spin, Alert, + Tabs, } from 'ant-design-vue' const app = createApp(App) @@ -62,6 +63,8 @@ app.component('Checkbox', Checkbox) app.component('Drawer', Drawer) app.component('Spin', Spin) app.component('Alert', Alert) +app.component('Tabs', Tabs) +app.component('TabPane', Tabs.TabPane) app.use(Icon) app.use(Component) diff --git a/src/types/slides.ts b/src/types/slides.ts index 9c4881ee..3c11e3ab 100644 --- a/src/types/slides.ts +++ b/src/types/slides.ts @@ -568,16 +568,28 @@ export type PPTElement = PPTTextElement | PPTImageElement | PPTShapeElement | PP /** * 元素动画 * + * id: 动画id + * * elId: 元素ID * * type: 动画类型 * + * effect: 动画效果 + * * duration: 动画持续时间 + * + * delay: 动画延迟时间 + * + * implement: 动画启动方式(0->单击、1->与上一个一起、2->在上一个之后) */ export interface PPTAnimation { + id: string; elId: string; type: string; + effect: string; duration: number; + delay: number; + implement: number; } /** diff --git a/src/utils/emitter.ts b/src/utils/emitter.ts index 7403cce2..c787f0a6 100644 --- a/src/utils/emitter.ts +++ b/src/utils/emitter.ts @@ -4,6 +4,8 @@ export const enum EmitterEvents { RICH_TEXT_COMMAND = 'RICH_TEXT_COMMAND', OPEN_CHART_DATA_EDITOR = 'OPEN_CHART_DATA_EDITOR', OPEN_LATEX_EDITOR = 'OPEN_LATEX_EDITOR', + RUN_ANIMATION = 'RUN_ANIMATION', + END_RUN_ANIMATION = 'END_RUN_ANIMATION', } export interface RichTextAction { @@ -20,6 +22,8 @@ type Events = { [EmitterEvents.RICH_TEXT_COMMAND]: RichTextCommand; [EmitterEvents.OPEN_CHART_DATA_EDITOR]: void; [EmitterEvents.OPEN_LATEX_EDITOR]: void; + [EmitterEvents.RUN_ANIMATION]: void; + [EmitterEvents.END_RUN_ANIMATION]: void; } const emitter: Emitter = mitt() diff --git a/src/views/Editor/Toolbar/ElementAnimationPanel.vue b/src/views/Editor/Toolbar/ElementAnimationPanel.vue index b7327dcf..f64da1a6 100644 --- a/src/views/Editor/Toolbar/ElementAnimationPanel.vue +++ b/src/views/Editor/Toolbar/ElementAnimationPanel.vue @@ -4,44 +4,77 @@ - -
选中画布中的元素添加动画
@@ -59,50 +92,89 @@ > - -
- - -
-
持续时间(毫秒):
- -
-