【问题标题】:Mouse and key events in Forge ViewerForge Viewer 中的鼠标和按键事件
【发布时间】: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


【解决方案1】:

您应该能够注册具有高优先级(例如 1000)的自定义工具,并在所有其他查看器工具之前吸收这些事件。查看changelog 了解更多关于tool.getPriority 的详细信息:

// in your custom tool ...
this.handleKeyDown = function(event, keyCode) {

  return true; // absorbed event ...
};

this.getPriority = function() {
   return 1000; // Default is 0, 
   //higher numerical value results in higher priority.
};

还有这篇文章:Creating custom tool

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 2020-07-19
    • 2021-11-27
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    相关资源
    最近更新 更多