【发布时间】:2016-05-04 18:33:51
【问题描述】:
我一直在 three.js 中实现所有 NeHe 演示(只是为了自娱自乐)。我也使用 OrbitControls。不幸的是,我发现 OrbitControls 似乎捕获了所有 keydown 事件,所以除非我在页面的某些部分放置一个绝对 div,否则单击该 div,然后按一个键,我永远不会得到关键事件。 OrbitControls 正在监听渲染器元素,我的正在监听文档。也许我错过了什么? 否则,这似乎很不幸。我可以想到其他几种方法(不要使用他们的键盘,一个覆盖屏幕并重新发出我不想要的关键事件的特殊 div 等)。这些似乎都不是很令人满意。 有什么建议吗?
【问题讨论】:
-
奇怪。除了触摸事件,OrbitControls 应该使用窗口来处理其事件并允许传播,类似于“window.addEventListener('keydown', onKeyDown, false);”在发布存储库中的 903:github.com/mrdoob/three.js/blob/master/examples/js/controls/… 也许演示代码中的某些内容已对此进行了修改。检查以确保它是窗口并检查您的 orbitControls.js 类中的 preventDefault 和 stopPropagtion 调用,然后再诉诸一些 hacky - 我认为事件传播根本不正确。
-
嗯。您可能会做一些事情,但是...实际上,我的 eventHandler 中有一个 stopPropagation 调用,但是只要 OrbitControls 在循环中,我的事件处理程序就不会被调用,所以我看不出它是一个因素。我刚刚测试过,但我可能会遗漏一些东西。我使用的代码是[这里]:(github.com/rkwright/nehe-3js-epub/blob/develop/EPUB/lesson16/…)
标签: events three.js key controls