touch js 怎么处理多点触摸

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了touch js 怎么处理多点触摸相关的知识,希望对你有一定的参考价值。

参考技术A <html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width , initial-scale=1 , maximum-scale=1 , user-scalable=no">
<style>
bodybackground-color:#222;
.spotposition:absolute; width:70px; height:70px; border-radius:35px; box-shadow:0px 0px 40px #fff; background-color:#fff; opacity:.7;
</style>
</head>
<body>
<script>
var spots = , touches , timer;本回答被提问者采纳

多点触摸屏——电容屏驱动程序

上面博客中讲解了电阻屏触摸屏的驱动程序,它是一个单点触摸的设备。现在大多数设备都支持了多点触摸,多点触摸的好处:

1)利用两个手指可以放大或缩小图片;

2)在一个触摸屏上,可以同时供多人使用;

在上述这两个简单的例子中,单点触摸就无法实现。必须使用多点触摸,顾名思义多点触摸就是在同一时间内,屏幕上可能有多个触点,驱动程序只需要把这多个触点的位置上报给应用程序就可以了。至于应用程序怎么处理,那是应用程序的事情。

驱动:上报多个触点的位置

 现在来看一下,单点触摸屏驱动程序与多点触摸屏驱动程序有哪些差异?

技术图片

 

驱动程序应该上报什么样的数据?

单点:

按下:   BTN_TOUCH  ,1(表示按下)

在滑动的过程中需要上报触点的位置:

for (; ;)

  ABS_X , x

  ABS_Y, y

  ABS_PRESSURE , 1(表示按下)

  BTN_TOUCH  ,1(在滑动过程中此值一直为1)

松开:   BTN_TOUCH  ,0(表示松开)

    ABS_PRESSURE , 0(表示松开)uod

多点:

多点触摸屏驱动程序上报的数据也是比较简单的,在同一时刻,有多少个点就上报多少个点的数据就可以了。

for(;;)

  t1时刻:上报p1位置

      上报p2位置

  t2 时刻:上报p3位置

      上报p4位置

  。。。。。。。。。。

  tn时刻:上报pn位置

问题来了,如何上报这些触点的位置?观察一下这几个触点,它们之间有什么联系?

p1和p3属于同一个手指上的划痕

p2和p4属于同一个手指上的划痕

在上报位置的时候,是否需要将触点之间的关系上报。由此上报数据就分为了两种。type A 和type B

type A :只上报触点位置,不关心触点之间的关系

技术图片

从上面可以看出,只是将触点的位置上报上去了,至于触点的关系不去处理。那谁去处理呢?

是由应用程序进行处理的。比如说p1和p3的位置比p1和p4的位置近,就认为p1和p3是一个手指滑动产生的,这仅仅是说明可能存在这种处理方式,在此不进行深究。

 在应用程序中需要计算,这种方式比较耗时。

typeB:上报触点位置,也上报触点之间的关系

 现在的多点触摸屏一般来说都有一个控制IC,直接访问控制IC就可以得到触点的位置,并且得到触点的关系。

比如说在t1时刻,去读控制IC,可以得到p1的位置,p2的位置。p1的ID,假设此ID为0。p2的ID,假设此ID为1

在t2时刻,去读控制IC,可以得到p3的位置,p4的位置。p3的ID,假设为此ID为0.(表示p1,p3属于同一条划痕)。p4的ID,假设此ID为1(表示p2,p4属于同一条划痕).

举个例子:

技术图片

 

以上是关于touch js 怎么处理多点触摸的主要内容,如果未能解决你的问题,请参考以下文章

zepto中的多点触摸

Linux/Android多点触摸协议

驱动TP电容屏驱动_3.TP报点协议A/B 之 3.内核中的多点触摸协议文档 Multi-touch (MT) Protocol

多点触摸屏——电容屏驱动程序

多点触摸与单点触摸接口主要区别

js触摸事件详细解读