- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Cesium SandcaSTLe demo说明了使用“movement”和“movement.endPosition”来获取鼠标移动的 Cartesian2 坐标。一个例子是 "Picking" demo in Sandcastle :
我是 Javascript 新手。到目前为止,隐式声明和变量提升不是我的菜!
所以我的问题是:基于上面提供的 Picking SandcaSTLe 演示,为了在鼠标悬停时显示经度/纬度的相同目的,我可以做什么来明确声明“movement.endPosition”?我对“运动”对象在没有首先明确声明的情况下出现感到不舒服。
我的研究使我找到了 Cesium.CameraEventAggregator 对象,它包含一个名为“currentMousePosition”的方法。
第 25-27 行来自演示:
// Mouse over the globe to see the cartographic position
handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function(movement) {
var cartesian = viewer.camera.pickEllipsoid(movement.endPosition, scene.globe.ellipsoid);
我尝试按如下方式替换“movement.endPosition”:
// Mouse over the globe to see the cartographic position
handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function() {
var mousePos = Cesium.CameraEventAggregator(scene.canvas);
var cartesian = viewer.camera.pickEllipsoid(mousePos.currentMousePosition, scene.globe.ellipsoid);
这导致鼠标悬停时不显示任何信息。
非常感谢任何帮助,在此先感谢您,对于冗长的问题陈述深表歉意!曼尼
最佳答案
ScreenSpaceEventHandler
监听屏幕空间中发生的事件(即鼠标、触摸和指针事件)。当您调用 .setInputAction
时,您正在分配一个您希望调用以响应这些事件的回调函数。
JavaScript 允许将函数声明为内联,这可能是混淆的一部分。下面,我重构了这个函数,将这个回调分解为一个名为 onMouseMove
的真实函数。
分解此函数后,可以更清楚地看到 movement
被声明为要传递给 onMouseMove
回调函数的唯一参数。
// Declare entity first.
var entity = viewer.entities.add({
label : {
show : false,
//...
}
});
// Declare function "onMouseMove" that takes one argument called "movement".
// This could be declared above, but, it makes use of the entity, so for
// code readability it should appear after "entity" is declared.
function onMouseMove(movement) {
var cartesian = viewer.camera.pickEllipsoid(movement.endPosition, scene.globe.ellipsoid);
if (cartesian) {
var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
var longitudeString = Cesium.Math.toDegrees(cartographic.longitude).toFixed(2);
var latitudeString = Cesium.Math.toDegrees(cartographic.latitude).toFixed(2);
// NOTE: Using "entity" from outer scope here.
entity.position = cartesian;
entity.label.show = true;
entity.label.text = 'Lon: ' + (' ' + longitudeString).slice(-7) + '\u00B0' + '\nLat: ' + (' ' + latitudeString).slice(-7) + '\u00B0';
} else {
entity.label.show = false;
}
}
// Construct a ScreenSpaceEventHandler.
handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
// Finally, assign function "onMouseMove" as the callback for the event.
handler.setInputAction(onMouseMove, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
看看最后一行。如果用整个函数声明替换该行中的单词 onMouseMove
,代码将与 SandcaSTLe 上的原始代码相同。
因此,movement
是一个在 ScreenSpaceEventHandler
内部构造的对象,用于将事件传递给回调函数。在这种特殊情况下,movement.endPosition
是 Cesium.Cartesian2
对象的实例,具有 x
和 y
表示鼠标移动在屏幕空间中的结果位置的值。
viewer.camera.pickEllipsoid(...
函数可以采用您希望考虑的任何屏幕位置的任何 Cesium.Cartesian2
值。例如:
var myCustomScreenLocation = new Cesium.Cartesian2(300, 200);
var cartesian = viewer.camera.pickEllipsoid(myCustomScreenLocation, scene.globe.ellipsoid);
这会选择距离左侧 300 像素、距离 Cesium 窗口顶部 200 像素的位置。
编辑:这里是 another demo显示如何显示当前鼠标/触摸/指针坐标。
var viewer = new Cesium.Viewer('cesiumContainer');
var lastMousePosition;
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(movement) {
lastMousePosition = movement.endPosition;
document.getElementById('toolbar').innerHTML =
'Mouse X: ' + lastMousePosition.x + ' Y: ' + lastMousePosition.y;
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
关于javascript - 显式声明 "movement"和 "movement.endPosition"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58970034/
Cesium SandcaSTLe demo说明了使用“movement”和“movement.endPosition”来获取鼠标移动的 Cartesian2 坐标。一个例子是 "Picking" d
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我一直在玩 webGL,我已经达到了可以制作图形非常可怜的小型三维游戏的程度(到目前为止,它更多的是概念/功能的证明)。对于三维体验来说,向任意方向无限移动鼠标来旋转第一人称视角是很不错的。 Poin
这是我第一次在这里写文章。我对 JQuery 动画有一些问题:当持续时间非常慢(例如 10000)时, Action 不够平滑。我的 div 需要一个“自然”的运动。有人知道我的问题的解决方案吗?或者
我正在开发离线 FPS 多人游戏。 当 Player Rotation 值为 (0,0,0) 时,Player 会朝着完美的方向移动。但是,我的问题是当我使用触摸输入旋转相机时。玩家也可以旋转脸部并按
我在分布式系统中遇到分片移动问题。 【问题】 最初每个分区负责任意数量的分片。 (这个数字可以是任意的,因为系统支持将分片从一个分区移动到另一个分区) 然后一个新的分区来了,系统需要重新分片。目标是使
是否可以在窗口中停止鼠标移动并仅允许在特定框中移动? 例如,我有一个div,其宽度:200px和高度:200px,只允许在此div中移动鼠标。 谢谢。 最佳答案 Javascript 可以读取鼠标位置
我创建了一个自定义组件,它扩展了 TextField 并允许对特定类型的字符串进行高级编辑。 箭头键已被重新定义以允许特定行为并且应该不会触发默认的插入符移动但是我似乎无法阻止它移动。我已经使用了()
我创建了一个自定义组件,它扩展了 TextField 并允许对特定类型的字符串进行高级编辑。 箭头键已被重新定义以允许特定行为并且应该不会触发默认的插入符移动但是我似乎无法阻止它移动。我已经使用了()
我想做一个函数,根据传递的字母改变特定的值。 (这些基本上给出了方向:东,西......) 代码是: data Movement = N Int | S Int | E Int | W Int de
我正在从事一个非常酷的项目,我正在收集有关光标移动的数据,但我遇到了一个问题,我认为我需要一些帮助。我不断读取有关光标 x 和 y 位置的数据(以及其他相关数据),一旦光标在 y 维度上超过某个阈值,
我怎样才能在 Sprite 被施加这样的冲动后停止它: player.physicsBody!.applyImpulse(CGVectorMake(50, 0)) 是否有可能使运动在一段时间内减少?
我有一个子菜单,当悬停在导航元素上时,它会变为可见。当该元素不再悬停时,子菜单将变为不可见并向上移动。我已经在下面附上了我的部分代码。我面临的问题是,由于子菜单就在导航元素的正下方,向上移动会在转换期
我是 Unity 新手,正在关注 this tutorial .当我尝试执行代码时遇到的错误应该是左右移动播放器是: UnassignedReferenceException: The variabl
谷歌最近在那里重新设计了移动行为 map 。现在在移动设备上,您可以用两根手指移动 map 。 (请参阅手机上的 map-simple 示例,而不是任何浏览器模拟器!)。 我想在 openlayer
据我了解,GPS 的精度有限。是否有可能在 3D 空间中获得一个人的更精确的位置? 我计划编写一个应用程序,用户可以将手机向任何方向移动,但只需要移动几英尺。是否有任何技术(也许使用加速度计和陀螺仪)
如何防止图像移动。如果图像的位置 = 350,如何防止移动。类似于遏制,恰恰相反。请帮忙。 $('#image').draggable( {
这是我应该问的问题,而不是这个: Emacs evil: space as a prefix key in motion state 我想定义一堆用于移动、移动、打开和关闭窗口和缓冲区的命令,这些命令
我是计算机类三人组的三分之一(高中新生)。对于我们的项目,我们决定用 Java 制作一个吃 bean 人风格的游戏。我们都没有太多经验,所以到目前为止,我们基本上都是在自学。我们已经取得了相当大的进步
我正在开发一个类似 HTML5 3D fps 的引擎,它看起来已经相当不错,但由于这可能是制作 3D 的最糟糕的语言选择之一,因此有时会出现明显的延迟。 我将运动 (WASD) 编程为独立于渲染速度,
我是一名优秀的程序员,十分优秀!