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