【问题标题】:Three.js OrbitControls captures all key eventsThree.js OrbitControls 捕获所有关键事件
【发布时间】: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


【解决方案1】:

我刚才遇到了这个问题,但是当我将 onKeyDown 放在与 OrbitControls 用作其 DOM 节点的同一 div 上时,问题就解决了。

【讨论】:

    猜你喜欢
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多