检测夹点的最简单方法

新手上路,请多包涵

这是一个 WEB 应用程序,不是本机应用程序。请不要使用 Objective-C NS 命令。

所以我需要检测 iOS 上的“挤压”事件。问题是我看到的用于执行手势或多点触控事件的每个插件或方法(通常)都使用 jQuery,并且是一个完整的附加插件,用于在阳光下的每个手势。我的应用程序很大,而且我对代码中的死枝非常敏感。我所需要的只是检测捏合,而使用像 jGesture 这样的东西只是为了满足我的简单需求而变得臃肿。

此外,我对如何手动检测夹点了解有限。我可以得到两个手指的位置,但似乎无法正确混合以检测到这一点。有没有人有一个简单的片段可以检测到挤压?

原文由 Fresheyeball 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 489
2 个回答

您要使用 gesturestartgesturechangegestureend 事件。只要 2 个或更多手指触摸屏幕,这些就会被触发。

根据您需要对捏合手势执行的操作,您的方法将需要进行调整。可以检查 scale 乘数以确定用户的捏合手势有多剧烈。有关 scale 属性的行为方式的详细信息,请参阅 Apple 的 TouchEvent 文档

 node.addEventListener('gestureend', function(e) {
    if (e.scale < 1.0) {
        // User moved fingers closer together
    } else if (e.scale > 1.0) {
        // User moved fingers further apart
    }
}, false);

您还可以拦截 gesturechange 事件,以便在需要时检测捏合情况,以便让您的应用感觉响应更快。

原文由 Dan Herbert 发布,翻译遵循 CC BY-SA 3.0 许可协议

想一想 pinch 事件是什么:两个手指放在一个元素上,相互靠近或远离。据我所知,手势事件是一个相当新的标准,因此最安全的方法可能是使用如下触摸事件:

( ontouchstart 事件)

 if (e.touches.length === 2) {
    scaling = true;
    pinchStart(e);
}

ontouchmove 事件)

 if (scaling) {
    pinchMove(e);
}

( ontouchend 事件)

 if (scaling) {
    pinchEnd(e);
    scaling = false;
}

要获得两个手指之间的距离,请使用 hypot 函数:

 var dist = Math.hypot(
    e.touches[0].pageX - e.touches[1].pageX,
    e.touches[0].pageY - e.touches[1].pageY);

原文由 Jeffrey Sweeney 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏