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 @@