ScreenSpaceEventHandler
是一个处理CesiumJS场景的鼠标和触摸事件的类。它提供了一组方法,可以让开发者在全局或特定场景元素上绑定鼠标或触摸事件监听器。
由于ScreenSpaceEventHandler
是CesiumJS内置的类,因此无需安装或导入。只需在CesiumJS应用程序中通过创建ScreenSpaceEventHandler
实例来使用即可。
// 创建ScreenSpaceEventHandler实例
var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
创建ScreenSpaceEventHandler
对象时需要为其传入一个HTML元素,这个元素是事件处理程序的目标。HTML元素可以是一个足够大的<div>
或者是CesiumViewer
对象的canvas属性。
var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
当ScreenSpaceEventHandler
被销毁时,该属性变为true。销毁后访问handler
对象会触发异常。
将输入事件绑定到ScreenSpaceEventHandler
实例上。
action: function
- 当输入事件发生时要执行的函数。type: ScreenSpaceEventType | Array<ScreenSpaceEventType>
- 要绑定的输入事件类型(eg:LEFT_CLICK
,WHEEL
等)。使用ScreenSpaceEventType
常量、字符串常量或其组合而成的数组。modifier: KeyboardEventModifier
- 表示事件在触发时所需的键盘修饰符的常量。handler.setInputAction(function(click) {
console.log('Left button clicked: ', click.position);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
从ScreenSpaceEventHandler
实例上解除绑定输入事件。
type: ScreenSpaceEventType | Array<ScreenSpaceEventType>
- 要解除绑定的输入事件类型。使用ScreenSpaceEventType
常量、字符串常量或其组合而成的数组。modifier: KeyboardEventModifier
- 表示事件在触发时所需的键盘修饰符的常量。// 解绑左键单击事件
handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
返回从指定位置拾取到的场景中的对象。
click: Object
position: Cartesian2
- 单击/触摸点的屏幕坐标位置。button: number
- 触发事件的鼠标按钮的类型。result: Object
- 可选的输出对象,将被修改并返回表示拾取结果的实体。如果未指定,则新对象将被创建。var pickedObject = handler.pick({
position : new Cesium.Cartesian2(x, y)
});
释放ScreenSpaceEventHandler
对象占用的资源。
handler.destroy();
下面是一段示例代码,该代码演示了如何在CesiumJS中使用ScreenSpaceEventHandler
类以处理鼠标事件。
var viewer = new Cesium.Viewer('cesiumContainer');
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(movement) {
var pickedObject = viewer.scene.pick(movement.endPosition);
if (Cesium.defined(pickedObject)) {
console.log('pickedObject: ', pickedObject);
}
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
在此示例中,我们首先创建了一个ScreenSpaceEventHandler
实例,然后将其与Viewer
对象中的canvas元素绑定。然后,我们将回调函数与鼠标移动事件绑定。在回调函数中,我们使用scene.pick
方法获取从指定位置拾取到的场景中的对象。如果我们从位置拾取到了对象,则在控制台中记录对象的信息。