cesium在vue框架中 鼠标移入entity显示其label信息提示框 移出提示框消失
时间: 2023-12-14 10:11:15 浏览: 218
要实现鼠标移入 entity 显示 label 信息提示框,移出时提示框消失,可以按照以下步骤进行:
1. 在 Vue 组件中引入 Cesium 库:
```javascript
import Cesium from 'cesium/Cesium';
import 'cesium/Widgets/widgets.css';
```
2. 在 `mounted` 钩子函数中初始化 Cesium 以及创建 viewer:
```javascript
mounted() {
// 初始化 Cesium
this.viewer = new Cesium.Viewer(this.$refs.cesiumContainer, {
geocoder: false,
homeButton: false,
sceneModePicker: false,
navigationHelpButton: false,
animation: false,
timeline: false
});
}
```
3. 在 `created` 钩子函数中创建要显示的 entity 和 label:
```javascript
created() {
// 创建要显示的 entity 和 label
const position = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);
const entity = this.viewer.entities.add({
position: position,
point: {
pixelSize: 10,
color: Cesium.Color.YELLOW
}
});
entity.label = {
text: 'Hello, world!',
show: false,
showBackground: true,
font: '14px monospace',
style: Cesium.LabelStyle.FILL_AND_OUTLINE,
outlineWidth: 2,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
pixelOffset: new Cesium.Cartesian2(0, -9)
};
}
```
4. 在 `mounted` 钩子函数中添加鼠标移入和移出事件监听器:
```javascript
mounted() {
// ...
// 添加鼠标移入和移出事件监听器
this.handler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas);
this.handler.setInputAction(event => {
const pickedObject = this.viewer.scene.pick(event.endPosition);
if (Cesium.defined(pickedObject) && pickedObject.id === entity) {
entity.label.show = true;
}
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
this.handler.setInputAction(event => {
entity.label.show = false;
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
}
```
这样,当鼠标移动到 entity 上时,label 信息提示框会显示出来,移出时会消失。其中 `entity` 是在第三步中创建的,需要在第四步中使用。同时需要注意,要在组件销毁时清除事件监听器:
```javascript
beforeDestroy() {
// 清除事件监听器
this.handler.destroy();
this.viewer.destroy();
}
```
阅读全文