【发布时间】:2016-08-04 13:43:01
【问题描述】:
根据 Github (https://github.com/mrdoob/three.js/issues/1321) 和 Stakoverflow (Dynamically create 2D text in three.js) 上的建议,我选择在 HTML div 中覆盖文本。
我遇到的问题是当用户旋转场景并且光标经过任何 div 时,拖动停止。当光标继续在文本 div 的另一侧时,拖动操作不会恢复。这会导致拖动动作神秘地停止,只能通过释放鼠标按钮并重新应用来恢复。
我正在谈论的示例在此页面上:http://www.intmath.com/vectors/3d-space-interactive-applet.php
我正在使用带有 controls = new THREE.OrbitControls(camera, renderer.domElement); 的标准 OrbitControls.js
我试过了:
(1) 从 div 中检测 mouseout 并设置 controls.enabled true 不起作用。同时切换controls.enabled = false 肯定会禁用控件,但我无法让它们在mouseout 上再次启动。
(2) 模拟mouseup(在 div 上方)然后在 div 中的mouseout 上模拟mousedown - 也没有运气。
(3) 试图隐藏mouseover 上的 div,但当然已经太迟了 - 拖动动作已经停止。
(4) 禁止突出显示 div 中的文本 - 无变化
那么是否有可能在拖动一个 div 后重新激活拖动动作,如果可以,如何?
问候
【问题讨论】:
-
这很难说,因为您没有任何关于您的设置的信息。例如,OrbitControls.js 使用文档级鼠标侦听器(请参见 three.js/examples/js/controls 中的第 703 行)。因此,触发 mouseout 事件需要将鼠标移出文档,例如,如果您的 3d 画布位于 iframe 中。同样,示例文件夹中的控件类不是 Three.js 构建的一部分,可以安全地修改。删除您使用的控件类中的 mouseout 声明。无论如何,它可能会触发与其 mouseup 事件相同的事件,并且可以安全地删除。
-
@Radio:我编辑了我的问题以使示例代码更清晰。您在第 703 行附近删除 mouseout 声明的建议起到了作用。谢谢!
标签: javascript three.js