feat: 在运动监控页面中新增右键菜单状态管理,优化画布事件处理逻辑,提升用户交互体验

This commit is contained in:
xudan 2025-10-14 14:21:24 +08:00
parent 49f87fd1cb
commit 83e4d68af7

View File

@ -390,6 +390,7 @@ onMounted(() => {
editorStore.setEditor(editor as ShallowRef<EditorService>);
storageLocationService.value = new StorageLocationService(editor.value, props.sid);
container.value?.addEventListener('pointerdown', handleCanvasPointerDown, true);
});
//#endregion
@ -450,6 +451,13 @@ onUnmounted(() => {
});
}
container.value?.removeEventListener('pointerdown', handleCanvasPointerDown, true);
if (rightClickGuardTimer) {
clearTimeout(rightClickGuardTimer);
rightClickGuardTimer = undefined;
}
//
document.removeEventListener('click', handleGlobalClick);
document.removeEventListener('keydown', handleGlobalKeydown);
@ -555,6 +563,28 @@ const show = ref<boolean>(true);
// - 使
const contextMenuManager = createContextMenuManager();
const contextMenuState = ref<ContextMenuState>(contextMenuManager.getState());
let rightClickGuardTimer: ReturnType<typeof setTimeout> | undefined;
/**
* Guard selection state before Meta2D processes the contextmenu event.
*/
const handleCanvasPointerDown = (event: PointerEvent) => {
if (event.button !== 2) return;
contextMenuManager.setState({ isRightClickActive: true });
if (rightClickGuardTimer) {
clearTimeout(rightClickGuardTimer);
}
rightClickGuardTimer = setTimeout(() => {
rightClickGuardTimer = undefined;
if (!contextMenuState.value.visible) {
contextMenuManager.setState({ isRightClickActive: false });
}
}, 200);
};
//#endregion
// iframe