新手必‘晕’的changedTouches,您肯定不知道的!(框架细节十二)

  • • 发表于 8年前
  • • 作者 Roluce
  • • 5464 人浏览
  • • 1 条评论
  • • 最后编辑时间 8年前
  • • 来自 [技 术]

原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处

以初学者的视角看问题,感谢各路大神的纠错与指教!

A:模拟器触摸点的局限

模拟器只能用鼠标点,所以同一时间只能是一点(Touches数组只有一个对象)。
其实真机同一时间可以有多个触点。
安卓/IOS手机至少2点触摸,苹果支持5点触摸。(Touches数组可以有多个多个对象)。


B:官方文档如下(本章重点讨论的)


touches

事件发生那一刻,当前停留在屏幕中的触摸点信息

模拟器的只支持鼠标单点,所以这点就在“引起事件”的这个组件上。
当真机有多点触摸的时候,事件发生那一刻,记录屏幕上所有的手指触摸点信息。
即使这个触摸点不在“引起事件”的这个组件上。


changedTouches

事件发生那一刻,当前变化的触摸点信息

“涉及当前事件的,页面上最新更改的”的 所有手指(触摸点)的列表

如果你在使用touchend,那么这个属性 非常重要。
在这种情况下,屏幕上都不会再出现手指,因此touches应该为空,但你仍然可以通过查看 changedTouches数组来了解最后发生的事情。


C:单点举例

touchstart事件

touches
触摸开始事件那一刻,屏幕上的触摸点为A

changedTouches
触摸开始时,涉及当前事件的触摸点也为A

所以:touches数组和changedTouches数组相同


touchend事件

touches
触摸结束事件那一刻,屏幕上已经没触摸点了

changedTouches
涉及此“触摸结束事件”的触摸点也为A,

所以touches数组为空,changedTouches数组为A的信息



D:多点举例

比如div1, div2,只有div2绑定了touchstart事件

开始
放下一个手指在div2上,触发了touchstart事件,
这个时候,两个集合的内容是一样的,都包含这个手指的touch。

然后
再放下两个手指一个在div1上,一个在div2上,这个时候又会触发事件。
changedTouches里面只包含第二个第三个手指的信息,因为第一个没有发生变化。
touches包含屏幕上所有手指的信息,也就是三个手指。



E:关于identifier

identifier
一个数值,唯一标识触摸会话(touch session)中的当前手指。

模拟器上只支持一点,作用不是很大。
在真机支持多点时,用于识别各个手指接触点。

分享到:
1条评论
Ctrl+Enter
作者

Roluce

Roluce

APP:0 帖子:50 回复:112 积分:3610

已加入社区[2933]天

山东_聊城_qq:635068

作者详情》
Top