mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2025-09-26 02:39:57 +08:00
fix(editor,stage): 优化悬停出现组件列表的交互体验
This commit is contained in:
parent
578af946b3
commit
5a25899b57
@ -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>
|
||||||
|
@ -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();
|
// mouseleave后,大概率还有最后一个mousemove事件,这里延迟清除
|
||||||
|
clearTimeoutLazy();
|
||||||
});
|
});
|
||||||
|
|
||||||
unWatch();
|
unWatch();
|
||||||
@ -135,11 +146,7 @@ const menuData = computed<MenuButton[]>(() =>
|
|||||||
|
|
||||||
const mouseenterHandler = () => {
|
const mouseenterHandler = () => {
|
||||||
// menu的mouseenter后,大概率还有最后一个mousemove事件,这里延迟清除
|
// menu的mouseenter后,大概率还有最后一个mousemove事件,这里延迟清除
|
||||||
globalThis.setTimeout(() => {
|
clearTimeoutLazy();
|
||||||
if (timeout) {
|
|
||||||
globalThis.clearTimeout(timeout);
|
|
||||||
}
|
|
||||||
}, 300);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const dragMenuHandler = ({ deltaY, deltaX }: OnDrag) => {
|
const dragMenuHandler = ({ deltaY, deltaX }: OnDrag) => {
|
||||||
|
@ -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>
|
||||||
|
@ -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 = () => {
|
||||||
|
@ -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) => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user