From 7b6b15aa1470dd5fee4fcc6cae0d3902ab3cf85d Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Sat, 29 Mar 2025 16:55:53 +0800
Subject: [PATCH] fix: 机巢点击交互bug
---
src/views/Home/useAggregation.js | 24 ++++++++++++++----------
1 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/src/views/Home/useAggregation.js b/src/views/Home/useAggregation.js
index db6ec45..1dc0104 100644
--- a/src/views/Home/useAggregation.js
+++ b/src/views/Home/useAggregation.js
@@ -20,7 +20,6 @@
let viewer = null;
const active = ref('');
let handler = null;
- let labelDiv = null;
let positionC3 = null;
const init = () => {
determineScaling();
@@ -128,8 +127,9 @@
};
const getLabelDom = () => {
- const vNode = h(MapPopUpBox, { data: '参数',removeLabel });
+ const vNode = h(MapPopUpBox, { data: '参数', removeLabel });
const tooltipContainer = document.createElement('div');
+ tooltipContainer.id = 'mapPopUpBox';
tooltipContainer.style.position = 'absolute';
tooltipContainer.style.transform = 'translateY(-50%)';
tooltipContainer.style.pointerEvents = 'none';
@@ -139,13 +139,15 @@
};
const labelBox = () => {
- if (!labelDiv) {
- labelDiv = getLabelDom();
+ let dom = document.querySelector('#mapPopUpBox');
+ if (!dom) {
+ dom = getLabelDom();
}
const screenPosition = viewer.scene.cartesianToCanvasCoordinates(positionC3);
if (screenPosition) {
- labelDiv.style.left = `${screenPosition.x}px`;
- labelDiv.style.top = `${screenPosition.y}px`;
+ dom.style.left = `${screenPosition.x}px`;
+ dom.style.top = `${screenPosition.y}px`;
+ dom.style.display = 'block';
}
};
@@ -154,6 +156,7 @@
if (Cesium.defined(pickedObject) && pickedObject.id) {
const entity = pickedObject.id;
positionC3 = entity.position._value;
+ viewer.scene.postRender.removeEventListener(labelBox);
viewer.scene.postRender.addEventListener(labelBox);
}
};
@@ -164,16 +167,17 @@
};
const removeLabel = () => {
viewer.scene.postRender.removeEventListener(labelBox);
- if (labelDiv && labelDiv.parentNode) {
- labelDiv.parentNode.removeChild(labelDiv);
- labelDiv = null;
+ const dom = document.querySelector('#mapPopUpBox');
+ if (dom && dom.parentNode) {
+ dom.parentNode.removeChild(dom);
}
};
- onUnmounted(() => {
+ onBeforeUnmount(() => {
removeEntities();
removeLabel();
handler?.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
+ handler?.destroy();
});
onMounted(() => {
--
Gitblit v1.9.3