【发布时间】:2018-03-16 01:23:11
【问题描述】:
是否可以在查看器 DOM 元素之外忽略 Forge 查看器中的关键事件?
我有一个单独的 DOM 元素,它有自己的键事件,但它们不起作用,因为查看器事件适用于整个 DOM(窗口)。我可以看到鼠标事件和按键事件的处理方式不同,但不明白为什么。
viewer3D.js (v. 4.0) 中的第 13015 - 13026 行:
// If we want to continue listenting to mouse movements outside of the window
// we need to tie our event listener to the window
this.domElement.addEventListener( 'mousewheel', this.mousewheel, false );
this.domElement.addEventListener( 'DOMMouseScroll', this.mousewheel, false ); // firefox
//** this.domElement.addEventListener( 'touchstart', function( event ) { _this.touchstart( event )}, false );
//** this.domElement.addEventListener( 'touchmove', function( event ) { _this.touchmove( event )}, false );
window.addEventListener( 'keydown', this.keydown, false );
window.addEventListener( 'keyup', this.keyup, false );
window.addEventListener( 'blur', this.blur, false );
这里可能有一个很好的内涵,但如果可以改变它会非常好。如果有一个顺利的解决方法,请告诉我,但我被卡住了。
【问题讨论】:
-
我相信你仍然可以添加其他听众,对吧?它对您的应用有何影响?
-
嗨!发现应该在我的其他 DOM 元素中处理关键事件的库无法正常工作。如果我自己将“keydown”事件绑定到该元素,则该事件将被触发并且工作正常。但是我仍然希望查看器键事件仅绑定到查看器 DOM 元素,因为我需要听上/下和左/右箭头。这些与查看器中的缩放/轨道控件冲突,这很烦人,因为我只想要查看器之外的自己的行为,并且只想要查看器内部的查看器行为。谢谢!
-
事件应该并行工作。由于 Viewer 不是输入,它需要在窗口级别跟踪键。
-
我可以看到问题,但我在下面的帖子中找到了一个简单的解决方案。通过在查看器 div 上设置 tabindex,它将起作用:stackoverflow.com/questions/3149362/…
标签: autodesk-viewer