fix: 优化运动监控页面右键菜单逻辑,移除冗余事件监听,增强事件处理的准确性和用户体验

This commit is contained in:
xudan 2025-10-15 16:53:36 +08:00
parent 5cd5ecba20
commit a46c170fbb
2 changed files with 30 additions and 21 deletions

View File

@ -424,12 +424,6 @@ onMounted(async () => {
contextMenuState.value = state; contextMenuState.value = state;
}); });
// EditorService
if (editor.value) {
(editor.value as any).on('customContextMenu', (event: Record<string, unknown>) => {
handleEditorContextMenu(event);
});
}
// //
document.addEventListener('click', handleGlobalClick); document.addEventListener('click', handleGlobalClick);
@ -572,18 +566,29 @@ let rightClickGuardTimer: ReturnType<typeof setTimeout> | undefined;
const handleCanvasPointerDown = (event: PointerEvent) => { const handleCanvasPointerDown = (event: PointerEvent) => {
if (event.button !== 2) return; if (event.button !== 2) return;
contextMenuManager.setState({ isRightClickActive: true }); console.log('[排查] 1. handleCanvasPointerDown 触发,直接处理右键逻辑');
// Meta2d contextmenu
event.preventDefault();
event.stopPropagation();
if (rightClickGuardTimer) { // EditorService
clearTimeout(rightClickGuardTimer); const penData = {
} e: event,
clientRect: {
x: event.clientX,
y: event.clientY,
width: 0,
height: 0,
top: event.clientY,
right: event.clientX,
bottom: event.clientY,
left: event.clientX,
},
pen: editor.value?.store.hover, // editor store
};
rightClickGuardTimer = setTimeout(() => { //
rightClickGuardTimer = undefined; handleEditorContextMenu(penData);
if (!contextMenuState.value.visible) {
contextMenuManager.setState({ isRightClickActive: false });
}
}, 200);
}; };
//#endregion //#endregion
@ -599,7 +604,7 @@ const backToCards = () => {
* @param penData EditorService传递的pen数据 * @param penData EditorService传递的pen数据
*/ */
const handleEditorContextMenu = (penData: Record<string, unknown>) => { const handleEditorContextMenu = (penData: Record<string, unknown>) => {
console.log('EditorService自定义右键菜单事件:', penData); console.log('[排查] 3. handleEditorContextMenu 开始处理事件', penData);
handleContextMenuFromPenData(penData, contextMenuManager, { handleContextMenuFromPenData(penData, contextMenuManager, {
storageLocationService: storageLocationService.value, storageLocationService: storageLocationService.value,
robotService: editor.value, // EditorService robotService: editor.value, // EditorService
@ -611,6 +616,7 @@ const handleEditorContextMenu = (penData: Record<string, unknown>) => {
*/ */
const handleCloseContextMenu = () => { const handleCloseContextMenu = () => {
contextMenuManager.close(); contextMenuManager.close();
contextMenuManager.setState({ isRightClickActive: false });
}; };
/** /**

View File

@ -1199,10 +1199,13 @@ export class EditorService extends Meta2d {
// 添加额外的右键事件监听器,确保阻止默认行为 // 添加额外的右键事件监听器,确保阻止默认行为
const canvasElement = this.canvas as unknown as HTMLCanvasElement; const canvasElement = this.canvas as unknown as HTMLCanvasElement;
if (canvasElement && canvasElement.addEventListener) { if (canvasElement && canvasElement.addEventListener) {
canvasElement.addEventListener('contextmenu', (event) => { canvasElement.addEventListener(
event.preventDefault(); 'contextmenu',
event.stopPropagation(); (event) => {
}, true); event.preventDefault(); // 仅屏蔽浏览器默认菜单,保留 Meta2D 的事件派发
},
true,
);
} }
// 注册自定义绘制函数和锚点 // 注册自定义绘制函数和锚点