【问题标题】:Raycast threejs touch event not working using mouse eventRaycast threejs触摸事件无法使用鼠标事件
【发布时间】:2022-02-01 07:58:06
【问题描述】:

我一直在使用fabricjs 开发threejs 鼠标光线投射,它现在可以工作here 但问题是如果我使用的是正在使用触摸的智能手机,对象不会移动。我应该为触摸事件创建另一个事件侦听器吗?还是应该使用鼠标事件正常工作?

这是我如何移动对象

  if (e.target !== this.upperCanvasEl) {
    var positionOnScene = getPositionOnScene(container, e);
    pointer.x = positionOnScene.x;
    pointer.y = positionOnScene.y;
  }

这是getPositionOnScene 函数

 function getPositionOnScene(sceneContainer, evt) {
    var array = getMousePosition(container, evt.clientX, evt.clientY);
    onClickPosition.fromArray(array);
    var intersects = getIntersects(onClickPosition, scene.children);
    if (intersects.length > 0 && intersects[0].uv) {
      var uv = intersects[0].uv;
      intersects[0].object.material.map.transformUv(uv);
      return {
        x: getRealPosition('x', uv.x),
        y: getRealPosition('y', uv.y)
      }
    }
    return null
  }

谁能帮助我?任何想法都会很有帮助

【问题讨论】:

  • 触摸设备不遵循通常的鼠标事件,因为它们没有鼠标。相反,您必须使用TouchEvent API,它与鼠标非常相似,但可以适应触摸的差异。所以你必须做addEventListener("touchstart", callback)。它还支持"touchend" and "touchmove"
  • 嘿你怎么看这个?owayo.com/konfigurator_html/…这也使用touchevent吗?

标签: javascript three.js


【解决方案1】:

有两个原因。

1:

您在 `getPositionOnScene` 函数中返回 null。

2:

触摸与鼠标事件不同。

您将不得不执行 `document.addEventListener("mousedown", callback)`
所以它也支持鼠标事件。

【讨论】:

  • 是的,我也这么认为,我也尝试过指针事件,但没有运气。所以我为触摸创建了一个自定义处理程序,我还发现fabricjs 460版不适用于移动idk y,但我使用4.2现在它可以在移动设备上运行。无论如何感谢您的回答
猜你喜欢
  • 2021-11-25
  • 2010-12-03
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多