如何捕获触摸板输入

35

我已经四处寻找如何捕获笔记本电脑触摸板输入的方法,但似乎在Chrome扩展/JavaScript中找不到任何东西。

问题:如何捕获笔记本电脑上触摸板下按手指的数量(不是点击,而是按下并可能移动,就像使用鼠标一样),它们对应的x、y坐标和它们对应的抬起事件?

澄清:

  • 我不想检测触摸屏事件,只想检测触摸板事件。
  • 可以假设触摸板位于三年或更新的笔记本电脑上。

1
你做不到。没有这样的API。 - Michał Perłakowski
4个回答

4

我现在找不到它,但是我曾经在某个地方读过这个话题。但简要摘要是:它是一份草案/正在开发中,但目前没有任何浏览器支持它。

这里是W3C的草案:https://w3c.github.io/pointerevents/


1
哦,我知道在 Mac 上可以检测到有一个手指按下,然后另一个手指轻拍。有一些扩展程序利用了这种能力。可能在 Windows 的 Chrome 扩展中有一些替代/特殊的 API 方法? - N. Taylor Mullen
1
那么,了解这是如何工作的将会很有趣。但是据我所知,新的指针事件是唯一适用于此的规范,并且没有解决方案适用于所有浏览器且不需要特殊扩展程序。我猜只有非常有限的使用JavaScript事件仅由扩展程序支持。对于OSX,Safari有一个扩展程序:http://smus.com/multi-touch-browser-patch/。 - DaSch
1
嗯,如果这是可能的,那么这可能是他们在OSX上作为Chrome扩展程序所做的方式。有什么想法吗? - N. Taylor Mullen
1
从我的角度来看,所有在浏览器中默认未实现的东西都不值得考虑。而且VB、ActiveX和AutoHotkey是可怕的应用工具。 - DaSch
1
我完全同意。另一方面,这个问题是关于Chrome扩展的。所以你可以做出一些假设 :) - N. Taylor Mullen

2
我认为仅使用JavaScript是不可能实现这一点的。让我们这样来看:
考虑以下情况:
我使用的是带有多点触控和多手势触摸板的Macbook Pro 13英寸Retina显示屏。
现在,假设我在操作系统中设置手势,如果我用两个手指轻敲,则将其注册为正常左键单击,当我用一个手指轻敲时,则将其注册为右键单击。
现在想象一下,我们捕获了单击和双击事件,告诉我当我用一个手指进行单击时会触发哪个事件。它将是一个双击事件,并且当我用两个手指轻敲时,将触发单击事件。
另一种情况:想象一下,我在计算机上打开了反向滚动,现在当我向上滚动时,页面会向下滚动。这是Chrome/Firefox无法控制的。
结论:各种类型的操作系统中可能存在各种此类设置,涉及各种设备,例如轨迹板、轨迹球、触摸板、鼠标、魔术鼠标等。这使我感到,存在一个层位于浏览器和操作系统之间,用于检测触发事件,而此层由操作系统提供。它的操作系统根据用户定义的/预设设置来操作事件。可能会有意图提供和触发多个事件的设备,如触摸设备,在触摸时它们触发多个事件。但并非所有设备都是如此。因此,无论你是从鼠标、轨迹球、触摸板还是触摸屏单击,你都将获得一个通用事件,即“点击”,肯定会触发一些其他事件,但这取决于设备类型而不是你在操作系统中所做的设置。
你可以通过建立浏览器网页和操作系统之间的某种连接来捕获事件,如@AlvaroSanz所建议的那样。

这种方法对于像鼠标页面一样在页面上导航的向下手指是行不通的。 - N. Taylor Mullen

1

是的,从技术上讲你是正确的。你能详细说明一下如何持久地实现这个功能吗?比如说一个本地exe程序,它会在后台持续运行并捕获触摸板事件,并将任何输入信息传递回Chrome扩展程序。 - N. Taylor Mullen
好的,我没有任何具体信息可提供,但我建议您查看Google的本地客户端SDK示例,以获得一些想法。 - Allen

1

VB和JavaScript似乎只适用于IE。但是,Chrome有一个IETab扩展程序,它看起来可以启动IE并在Chrome中呈现自己,从而启用ActiveX(用于编写与JavaScript通信的VB)。您知道类似的执行外部可执行文件以读取触摸板状态的方法吗? - N. Taylor Mullen
这里提到了一些关于本地消息传递的内容,可以让Chrome插件与应用程序进行通信。要启动外部可执行文件,您可以使用NPAPI插件,但它正在被淘汰,更多信息请参见此处。 - AlvaroSanz
我很想为赏金标记一个正确的答案。如果您能提供一个超级简单的示例(可以假设很多东西),利用本机消息传递和某种连续监视本机应用程序中的触摸板输入,我将非常乐意将其标记为正确。 - N. Taylor Mullen
给我几天时间,这些日子有很多妥协 :) - AlvaroSanz

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