From 434bf2ed70b8261eb669ea39eab99fab29ecff46 Mon Sep 17 00:00:00 2001 From: roymondchen Date: Wed, 5 Jul 2023 14:14:53 +0800 Subject: [PATCH] =?UTF-8?q?feat(editor):=20=E6=96=B0=E5=A2=9E=E5=8F=B3?= =?UTF-8?q?=E9=94=AE=E8=8F=9C=E5=8D=95=E7=A7=BB=E5=8A=A8=E8=87=B3=E5=85=B6?= =?UTF-8?q?=E4=BB=96=E9=A1=B5=E9=9D=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../editor/src/components/ContentMenu.vue | 14 ++- packages/editor/src/icons/CenterIcon.vue | 13 +++ .../editor/src/layouts/sidebar/LayerMenu.vue | 29 ++---- .../src/layouts/workspace/ViewerMenu.vue | 45 ++------- packages/editor/src/theme/content-menu.scss | 2 +- packages/editor/src/utils/content-menu.ts | 92 +++++++++++++++++++ 6 files changed, 133 insertions(+), 62 deletions(-) create mode 100644 packages/editor/src/icons/CenterIcon.vue create mode 100644 packages/editor/src/utils/content-menu.ts diff --git a/packages/editor/src/components/ContentMenu.vue b/packages/editor/src/components/ContentMenu.vue index 7f826306..9b21b44e 100644 --- a/packages/editor/src/components/ContentMenu.vue +++ b/packages/editor/src/components/ContentMenu.vue @@ -4,10 +4,11 @@ @@ -48,6 +49,7 @@ const props = withDefaults( const emit = defineEmits(['hide', 'show']); const menu = ref(); +const buttons = ref[]>(); const subMenu = ref(); const visible = ref(false); const subMenuData = ref<(MenuButton | MenuComponent)[]>([]); @@ -101,7 +103,7 @@ const show = (e: MouseEvent) => { }, 300); }; -const showSubMenu = (item: MenuButton | MenuComponent) => { +const showSubMenu = (item: MenuButton | MenuComponent, index: number) => { const menuItem = item as MenuButton; if (typeof item !== 'object' || !menuItem.items?.length) { return; @@ -110,9 +112,15 @@ const showSubMenu = (item: MenuButton | MenuComponent) => { subMenuData.value = menuItem.items || []; setTimeout(() => { if (menu.value) { + // 将子菜单放置在按钮右侧,与按钮齐平 + let y = menu.value.offsetTop; + if (buttons.value?.[index].$el) { + const rect = buttons.value?.[index].$el.getBoundingClientRect(); + y = rect.top; + } subMenu.value?.show({ clientX: menu.value.offsetLeft + menu.value.clientWidth, - clientY: menu.value.offsetTop, + clientY: y, }); } }, 0); diff --git a/packages/editor/src/icons/CenterIcon.vue b/packages/editor/src/icons/CenterIcon.vue new file mode 100644 index 00000000..baf856ca --- /dev/null +++ b/packages/editor/src/icons/CenterIcon.vue @@ -0,0 +1,13 @@ + + + diff --git a/packages/editor/src/layouts/sidebar/LayerMenu.vue b/packages/editor/src/layouts/sidebar/LayerMenu.vue index ed31ac5a..0b8ba8bf 100644 --- a/packages/editor/src/layouts/sidebar/LayerMenu.vue +++ b/packages/editor/src/layouts/sidebar/LayerMenu.vue @@ -4,12 +4,11 @@