当你将一根手指放到触摸屏上时,你就创建了一个触控事件。手指作出不同的动作,会导致不同的触控事件产生。手指接触到触摸屏,会产生一个touchstart事件。手指抬起、离开触摸屏,会产生一个touchend事件。手指接触到触摸屏后并未马上抬起、而是移动了,那么就会产生touchmove事件。如果手指还在触摸屏上的时候另一个应用被启动了,那么就会产生一个touchcancel事件。综上系统存在如下类型的触控事件:
- touchstart事件:手指放到触摸屏上时产生
- touchend事件:手指离开触摸屏上时产生
- touchmove事件:手指放到触摸屏上后、离开触摸屏之前,贴着屏幕移动时产生
- touchcancel事件:手指未离开触摸屏、触控事件却被强行终止,那么产生touchcancel事件。
因为指头在屏幕上的作用与鼠标在屏幕上的作用相同,所以触控事件与鼠标事件似乎具有一一对应的关系。但是,千万不能这样认为,触控事件与鼠标事件是不同的。PC机上只有一个鼠标,在某时刻最多有一个鼠标事件产生。触摸屏可不同,完全可以将多个手指同时放到触摸屏上。因此,完全有可能让多个触控事件同时产生。
为了正确记录同时接触的多个点,触控事件需要包含如下的三种信息:
- touches:这是一个链表,记录了所有接触屏幕的手指的位置。
- targetTouches:这是一个链表,记录了与操作同一节点的手指的位置。
- changedTouches:这是一个链表,记录了改变了动作的手指的位置。
假如有3根手指A(a0, a1),B(b0, b1),C(c0, c1)都接触了屏幕,其中A手指接触了节点node1,B、C手指接触了节点node2。如果C手指移动了一下改变了位置变为(cc0, cc1),那么这三个列表记录的信息为:
- touches:A(a0, a1), B(b0, b1), C(cc0, cc1) 所有手指的位置
- targetTouches:B(b0, b1), C(cc0, cc1) 操作node2节点的手指的位置
- changedTouches:C(cc0, cc1) 改变动作的手指的新位置
上面是触控事件包含的三个列表,我觉得三个列表的功能应该说清楚了。前文叙述中,只简单的说列表中存储的是位置信息。太笼统了,下面详细介绍列表中存储的信息。
- clientX: 相对于文档视口原点的x坐标。例如触摸的在文档坐标系中的位置为(100, 500),视口原点在文档坐标系中的位置为(50, 50)。那么clientX为50。
- clientY: 相对于文档视口原点的y坐标。例如触摸的在文档坐标系中的位置为(100, 500),视口原点在文档坐标系中的位置为(50, 50)。那么clientY为450。
- screenX:相对于屏幕原点的x坐标。
- screenY:相对于屏幕原点的y坐标。
- pageX:文档坐标系中的x坐标。
- pageY:文档坐标系中的y坐标。
- identifier:每一个位置都有一个id ,不同的位置对应的id是不同的。Id的类型是整数。
- target:手指接触的dom节点。
原文地址: http://www.sitepen.com/blog/2011/12/07/touching-and-gesturing-on-iphone-android-and-more/
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113356 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!