欢迎各位兄弟 发布技术文章
这里的技术是共享的
touch系事件是触屏设备上的一系列事件,当用户触摸屏幕时及进行一系列操作时发生的事件。 包含touchstart, touchmove, touchend事件。
我们将焦点集中在事件这个抽象对象上去,例如当手指在触摸屏上移动过程中发生的touchmove事件,我们去查找此事件相关的属性,根据前后事件的发生(例如touchstart和touchend事件),去判断是否符合程序触发任务的条件(例如当用户向上滑动时你要做一个页面动画)。
需要指出的是,touch事件同其他dom事件一样(因为本身就属于dom事件,只不过用在触屏设备的新增html5事件而已),用addEventListener绑定,在事件处理时使用e.prevantDefault()来阻止默认事件执行(例如你在滚动div时,使用它来阻止页面滚动),使用e.stopPropagation()来阻止事件向上冒泡,等等。
touchList:touch类对象组成的数组 touch对象:touch对象表示一个触点,触点属性包含identifier, target, clientX/clientY, pageX/pageY, screenX/screenY, force(接触面最小椭圆角度)/radiusX(接触面最小椭圆X轴)/radiusY(接触面最小椭圆Y轴)/rotationAngle(chrome上目前还是带有webkit前缀的webkitForce(压力)/webkitRadiusX/webkitRadiusY/webkitRotationAngle), 其中identifier用来标识该触点,因为屏幕上可能同时存在多个触点。
实验:
changedTouches属性: 一个touchList数组,表示该事件发生时发生改变的触点,一般都是该触点本身。
此时来说说indetifier这个属性吧:
实验:
1、一根手指Fa触发touchstart,该对象的identifier为0;
2、放上手指Fb, 此时触发第二个touchstart事件,identifier为1;
3、再放上Fc,此时触发第三个touchstart事件,identifier为2;
4、再放上Fd,此时触发第四个touchstart事件,identifier为3;
5、此时把Fa抬起,放上Fe, 此时触发第五的touchstart事件,identifier为0;
6、此时把Fd抬起,放上Ff,此时触发第六个tounchstart事件,identifier为3;
summary:标识会自动填上从0开始且不存在的identifier,所以以indentifier来标识触摸点时要注意这一点。
touches属性:
一 个 TouchList 对象,包含了所有当前接触触摸平面的触点的 Touch 对象,无论它们的起始于哪个element 上,也无论它们状态是否发生了变化。【摘自https://developer.mozilla.org】
当触摸点在触摸平面上移动时,触发touchmove事件。
实验:
* 再次拿出touch对象,但这时我们实验一下touch对象的target属性:
简单地让Fa从div#test滑出到body区域
过程中我们记录了touchmove事件,为简单起见,我们查看最后一个touchmove的事件对象,我们发现:
现象:此时的changedTouches中的touch对象的target为div#test,所以target属性指的是触发事件时所在的元素;
我们在此又发现一个现象:
从始至终,这一系列的touchmove事件都会触发div#test上的touchmove事件回调;
我们依然简单地让Fa从div#test滑出到body区域。
现象:在控制台上可以看出:
当div#test被删除后,只执行了div#test上的touchmove, 但已经不再冒泡到window。 注意:remove打印出来之前,事件已经冒泡到了window,所以随后有一个window的touchend的回调被执行。
当触摸点离开屏幕时触发touchend事件。 实验: * 在div#test上触屏后离开,触点无移动 现象:触发div#test的touchend事件
* 在div#test上滑动,且过程中没有离开div#test 现象:不会触发touchend事件
* 在div#test上滑动,且最终停止到body上并抬起手指 现象:不会触发touchend事件
来自 http://sentsin.com/web/1110.html