我想在 Cesium View 上检测相机位置、航向、倾斜或滚动的每次变化,以便我可以更新显示这些值的显示。经过大量搜索后,我最终发现我可以将事件处理程序添加到小部件场景对象上的一点也不直观的 preRender
或 postRender
事件。然而,这些事件都连续触发,每秒数百次。我猜他们每个时钟滴答发射一次。有没有我可以注册的另一个事件,它会在 map View 更改后触发?我正在寻找接近 Leaflet 的 moveend
事件和 preRender
和 postRender
的东西不是吗。
如果做不到这一点,有什么方法可以让 preRender
或 postRender
仅在实际发生更改时触发?
最佳答案
另一种不使用计时器的解决方案是监听相机移动开始和移动结束事件。
viewer.camera.moveStart.addEventListener(function() {
// the camera started to move
});
viewer.camera.moveEnd.addEventListener(function() {
// the camera stopped moving
});
这些听起来更像是您正在寻找的事件。
[编辑] : 虽然默认情况下启用惯性旋转和缩放并且看起来很酷,但可以非常轻松地禁用它们。这将使 moveEnd 事件按预期触发。这是禁用惯性的方法。
var viewer = new Cesium.Viewer();
viewer.scene.screenSpaceCameraController.inertiaSpin = 0;
viewer.scene.screenSpaceCameraController.inertiaTranslate = 0;
viewer.scene.screenSpaceCameraController.inertiaZoom = 0;
关于javascript - 如何在铯中获取场景变化事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29263166/