最近遇到一个事情,就是在entity上做点击事件、鼠标移过事件的监听。首先第一反应是看entity的api,是否有关于这些事件的监听,看了entity的api,只有entity的属性、方法,并没有事件监听的接口。
接着就想起来ScreenSpaceEventType这个接口,这个接口有关于事件的监听,可是如何将这些和entity关联起来呢?
这个事件是关于scene的,到scene的帮助文档看看,结果真的有发现
通过这个方法可以获取到要素,那就可以得到id,一切就解决了,代码如下
viewer.entities.add({
id:'obj_id_110',
position:Cesium.Cartesian3.fromDegrees(117 , 36 ,50),
name:'Red ellipse on surface with outline',
billboard:{
image: "./images/location4.png",
width:30,
height:40,
}
});
var scene = viewer.scene;
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(movement) {
var pick = viewer.scene.pick(movement.position);
if(Cesium.defined(pick) && (pick.id.id === 'obj_id_110')) {
console.log("left click");
}
},Cesium.ScreenSpaceEventType.LEFT_CLICK);
// 鼠标移入labelEntity提示框
handler.setInputAction(function(movement) {
var foundPosition = false;
if (scene.mode !== Cesium.SceneMode.MORPHING) {
var pickedObject = scene.pick(movement.endPosition);
if(Cesium.defined(pickedObject) && (pickedObject.id.id === 'obj_id_110')) {
console.log("mouse move");
}
}
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
效果如下所示