Javascript 反转触摸设备上的手势[Autodesk forge viewer]

Javascript 反转触摸设备上的手势[Autodesk forge viewer],javascript,autodesk-forge,autodesk-viewer,viewer,Javascript,Autodesk Forge,Autodesk Viewer,Viewer,反转触摸设备上的手势[Autodesk forge viewer] 我正在web应用程序中使用forge autodesk v7。我希望iPhone体验更加直观,这样我就可以在最佳状态下浏览浏览者。为此,我想颠倒触摸设备上的手势: 拖动1个手指=平移 2指拖动=旋转 我试图编写自己的方法来响应touchstart和touchmove,修改setView(位置、目标)失败 document.addEventListener('touchmove', this.touchEvent); touc

反转触摸设备上的手势[Autodesk forge viewer]

我正在web应用程序中使用forge autodesk v7。我希望iPhone体验更加直观,这样我就可以在最佳状态下浏览浏览者。为此,我想颠倒触摸设备上的手势:

拖动1个手指=平移

2指拖动=旋转

我试图编写自己的方法来响应touchstart和touchmove,修改setView(位置、目标)失败

document.addEventListener('touchmove', this.touchEvent);


touchEvent(ev): void {
if (ev.touches.length === 1) {
  const target = this.viewer.navigation.getTarget();
  const position = this.viewer.navigation.getPosition();
  position.x += ev.changedTouches[0].clientX;
  position.y += ev.changedTouches[0].clientY;
  target.x += (ev.changedTouches[0].clientX;
  target.y += ev.changedTouches[0].clientY;
  this.viewer.navigation.setView(position, target);
} else {
  console.log('Two finger');
}

}

恐怕目前还没有配置允许您简单地更改触摸手势的解释。我相信这是可以做到的,但这需要更多的努力。如果您感兴趣,请继续阅读:

查看器使用工具堆栈的概念(有关更多信息,请参阅),查看器使用的官方工具之一是工具堆栈中名为“手势”的
GestureHandler
。此工具生成可由堆栈中的其他工具使用的事件。您感兴趣的事件称为
HandleTesture
,默认相机工具-
OrbitDollyPanTool
-使用以下代码处理事件:

this.handleGesture=函数(事件){
开关(事件类型){
案例“dragstart”:
_touchType=“拖动”;
//单点触摸,现在假装鼠标。。。
返回此.handleButtonDown(事件,0);
案例“dragmove”:
如果(_touchType!=“拖动”){
这个。把手按钮(事件,0);
_touchType=“拖动”;
}
返回此.handleMouseMove(事件);
案例“dragend”:
//在多次触摸之后,我们似乎经常会遇到一个孤独的人。
如果(_touchType==“拖动”){
此。把手按钮(事件,0);
_touchType=null;
返回true;
}
返回false;
案例“panstart”:
_touchType=“pan”;
此.handlePanStart(事件);
本.handleDollyPan(事件);
返回true;
案例“panmove”:
如果(_touchType!=“平移”){
_touchType=“pan”;
此.handlePanStart(事件);
}
返回此.handleDollyPan(事件);
案例“panend”:
如果(_touchType==“平移”){
this.isDraging=false;
本.handleDollyPan(事件);
这个.interactionEnd(kTouch);
返回true;
}
返回false;
案例“pinchstart”:
this.isDraging=true;
_touchType=“挤压”;
_startXYZ.x=(event.normalizedX+1.0)*0.5;
_startXYZ.y=1.0-(event.normalizedY+1.0)*0.5;
_touchStartXY.set(event.canvasX、event.canvasY);
_startXY.set(event.canvasX,event.canvasY);
_ActiveModelLocked=false;
这个.interactionStart(kTouch);
本.handleDollyPan(事件);
返回true;
案例“pinchmove”:
返回(_touchType==“pinch”)?此.handleDollyPan(事件):false;
“Pinchen”案:
如果(_touchType==“按压”){
this.isDraging=false;
本.handleDollyPan(事件);
这个.interactionEnd(kTouch);
返回true;
}
返回false;
}
返回错误
};

因此,您可以覆盖
OrbitDollyPanTool
HandleTesture
方法来触发不同的鼠标事件。

无法对@Petr Broz答案发表评论,但它起到了作用!我们可以使用此实现锁定所有导航操作

正如建议的那样,我们使用触摸事件实现了我们自己的平移、缩放和动态观察,以跟踪屏幕上的用户手指