fix(editor,stage): 优化悬停出现组件列表的交互体验

This commit is contained in:
roymondchen 2023-09-20 14:46:57 +08:00
parent 578af946b3
commit 5a25899b57
5 changed files with 21 additions and 13 deletions

View File

@ -16,7 +16,7 @@
><MIcon v-if="data.icon" :icon="data.icon"></MIcon><span>{{ data.text }}</span></TMagicButton ><MIcon v-if="data.icon" :icon="data.icon"></MIcon><span>{{ data.text }}</span></TMagicButton
> >
</TMagicTooltip> </TMagicTooltip>
<TMagicButton v-else size="small" text :disabled="disabled" <TMagicButton v-else size="small" text :disabled="disabled" :title="data.text"
><MIcon v-if="data.icon" :icon="data.icon"></MIcon><span>{{ data.text }}</span></TMagicButton ><MIcon v-if="data.icon" :icon="data.icon"></MIcon><span>{{ data.text }}</span></TMagicButton
> >
</template> </template>

View File

@ -1,6 +1,8 @@
<template> <template>
<content-menu <ContentMenu
ref="menu" ref="menu"
class="magic-editor-node-list-menu"
style="max-width: 280px"
:menu-data="menuData" :menu-data="menuData"
:active="node?.id" :active="node?.id"
:auto-hide="!pinned" :auto-hide="!pinned"
@ -9,7 +11,7 @@
<template #title> <template #title>
<NodeListMenuTitle v-model:pinned="pinned" @change="dragMenuHandler" @close="closeHandler"></NodeListMenuTitle> <NodeListMenuTitle v-model:pinned="pinned" @change="dragMenuHandler" @close="closeHandler"></NodeListMenuTitle>
</template> </template>
</content-menu> </ContentMenu>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
@ -53,6 +55,14 @@ const cancel = () => {
menu.value?.hide(); menu.value?.hide();
}; };
const clearTimeoutLazy = () => {
globalThis.setTimeout(() => {
if (timeout) {
globalThis.clearTimeout(timeout);
}
}, 300);
};
const unWatch = watch( const unWatch = watch(
stage, stage,
(stage) => { (stage) => {
@ -90,7 +100,8 @@ const unWatch = watch(
}); });
stage.on('mouseleave', () => { stage.on('mouseleave', () => {
cancel(); // mouseleavemousemove
clearTimeoutLazy();
}); });
unWatch(); unWatch();
@ -135,11 +146,7 @@ const menuData = computed<MenuButton[]>(() =>
const mouseenterHandler = () => { const mouseenterHandler = () => {
// menumouseentermousemove // menumouseentermousemove
globalThis.setTimeout(() => { clearTimeoutLazy();
if (timeout) {
globalThis.clearTimeout(timeout);
}
}, 300);
}; };
const dragMenuHandler = ({ deltaY, deltaX }: OnDrag) => { const dragMenuHandler = ({ deltaY, deltaX }: OnDrag) => {

View File

@ -1,5 +1,5 @@
<template> <template>
<content-menu :menu-data="menuData" ref="menu"></content-menu> <ContentMenu :menu-data="menuData" ref="menu"></ContentMenu>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>

View File

@ -567,8 +567,9 @@ export default class ActionManager extends EventEmitter {
} }
}; };
private mouseLeaveHandler = () => { private mouseLeaveHandler = (event: MouseEvent) => {
setTimeout(() => this.clearHighlight(), throttleTime); setTimeout(() => this.clearHighlight(), throttleTime);
this.emit('mouseleave', event);
}; };
private mouseWheelHandler = () => { private mouseWheelHandler = () => {

View File

@ -367,10 +367,10 @@ export default class StageCore extends EventEmitter {
*/ */
private initMouseEvent(): void { private initMouseEvent(): void {
this.actionManager this.actionManager
.on('mousemove', async (event: MouseEvent) => { .on('mousemove', (event: MouseEvent) => {
this.emit('mousemove', event); this.emit('mousemove', event);
}) })
.on('mouseleave', async (event: MouseEvent) => { .on('mouseleave', (event: MouseEvent) => {
this.emit('mouseleave', event); this.emit('mouseleave', event);
}) })
.on('drag-start', (e: OnDragStart) => { .on('drag-start', (e: OnDragStart) => {