使用OrbitControls无法选择文本?

4
我正在使用OrbitControls.js制作一项Three.js项目,但是我发现无法使用OrbitControls选择(高亮)任何文本。
这是示例链接:http://threejs.org/examples/#misc_controls_orbit (尝试在示例顶部选择文本"orbit control example",我们做不到)
那么,如何使用OrbitControl选择(高亮)文本?
(还是说我每次想要复制文本时都必须禁用控件?)
谢谢。

不清楚你在问什么。你想选择哪段文本? - Matthew Cooley
嗨,我进行了编辑,我希望用户可以选择并复制我的项目中的任何文本。 - Ben Mack
你是指HTML文本还是任何HTML文本,或者你在谈论什么?你的场景中有3D文本几何体吗? - GuyGood
2个回答

12

默认情况下,OrbitControlsdocument 上监听鼠标事件,这就是为什么您不能在同一页上使用鼠标进行其他用途,比如选择文本或打开上下文菜单。您可以通过将一个 DOM 节点作为第二个参数传递给构造函数 THREE.OrbitControls 来更改此行为。然后,OrbitControls 会在该 DOM 节点上监听鼠标事件,而不是整个 document

如果您的代码如下所示:

var renderer = …;
container.appendChild(renderer.domElement);
…
var controls = new THREE.OrbitControls(camera);

然后将最后一行替换为

var controls = new THREE.OrbitControls(camera, renderer.domElement);

关于你提到的示例,你可以移动controls的初始化:

controls = new THREE.OrbitControls( camera );
controls.addEventListener( 'change', render );
在初始化renderer之后,将renderer.domElement作为第二个参数添加到构造函数THREE.OrbitControls中。现在您可以选择页面上的文本。

2
我爱你!!让我的一天变得更美好。 - user134055
你进来,看了一眼就把它搞定了。这就是老手编程的方式。 干得好,伙计! - Arashtad

1
创建输入框:
var identidad = document.createElement( 'INPUT' );

通过将焦点放在此元素上,扩展单击事件:

identidad.addEventListener( 'click', function ( event ) {
    $(this).focus();
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接